source: issm/trunk/src/m/qmu/plot/plot_rvsv_line.m@ 7398

Last change on this file since 7398 was 7398, checked in by jschierm, 14 years ago

Plot updates made for LIMS project.

File size: 7.7 KB
Line 
1%
2% plot line plots of responses vs. variables.
3%
4% []=plot_rvsv_line(dvar ,dresp ,params)
5% []=plot_rvsv_line(dvar ,descv,dresp,descr,params)
6% []=plot_rvsv_line(sampv,descv,sampr,descr,params)
7%
8% where the required input is:
9% dvar (structure array, variables)
10% or
11% dvar (structure array, variables)
12% descv (cell array, list of variable descriptions desired)
13% or
14% sampv (double array, lists of variable samples)
15% descv (cell array, list of variable descriptions)
16%
17% dresp (structure array, responses)
18% or
19% dresp (structure array, responses)
20% descr (cell array, list of response descriptions desired)
21% or
22% sampr (double array, lists of response samples)
23% descr (cell array, list of response descriptions)
24%
25% the required fields of dvar and dresp are:
26% descriptor (char, description)
27% sample (double vector, list of samples)
28%
29% the optional input is:
30% params (string/numeric, parameter names and values)
31%
32% where the optional parameters are:
33% nplotr (numeric, number of plot rows)
34% nplotc (numeric, number of plot columns)
35% ymin (numeric, minimum of y-axis)
36% ymax (numeric, maximum of y-axis)
37% yscat (char, 'off' to turn off y-axis scattergram)
38%
39% for each variable/response combination in the input array, this
40% function plots a line plot. all of the variables and responses
41% are plotted on the same axes, if nplotr and nplotc are not
42% specified, so some scaling might otherwise be desired.
43%
44% dvar and dresp data would typically be contained in the dakota
45% tabular output file from a sampling or parametric analysis, and
46% read by dakota_out_parse.
47%
48% "Copyright 2009, by the California Institute of Technology.
49% ALL RIGHTS RESERVED. United States Government Sponsorship
50% acknowledged. Any commercial use must be negotiated with
51% the Office of Technology Transfer at the California Institute
52% of Technology. (J. Schiermeier, NTR 47078)
53%
54% This software may be subject to U.S. export control laws.
55% By accepting this software, the user agrees to comply with
56% all applicable U.S. export laws and regulations. User has the
57% responsibility to obtain export licenses, or other export
58% authority as may be required before exporting such information
59% to foreign countries or providing access to foreign persons."
60%
61function []=plot_rvsv_line(varargin)
62
63if ~nargin
64 help plot_rvsv_line
65 return
66end
67
68%% process input data and assemble into matrices as needed
69
70% variables
71
72iarg=1;
73if isstruct(varargin{iarg})
74 dvar=varargin{iarg};
75 iarg=iarg+1;
76
77% if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
78 if iarg <= nargin && iscell(varargin{iarg})
79 dvar=struc_desc(dvar,varargin{iarg});
80 iarg=iarg+1;
81 end
82
83 descv=cell (1,length(dvar));
84 lsamp=zeros(1,length(dvar));
85 for i=1:length(dvar)
86 lsamp(i)=length(dvar(i).sample);
87 end
88 sampv=zeros(max(lsamp),length(dvar));
89 sampv(:,:)=NaN;
90
91 for i=1:length(dvar)
92 descv(i)=cellstr(dvar(i).descriptor);
93 sampv(1:lsamp(i),i)=dvar(i).sample;
94 end
95else
96 sampv=varargin{iarg};
97 iarg=iarg+1;
98
99 if iarg <= nargin && iscell(varargin{iarg})
100 descv=varargin{iarg};
101 iarg=iarg+1;
102% elseif iarg <= nargin && ischar(varargin{iarg})
103% descv=cellstr(varargin{iarg});
104% iarg=iarg+1;
105 else
106 descv=cell(1,size(sampv,2));
107 end
108end
109
110for i=1:length(descv)
111 if isempty(descv{i})
112 descv(i)={['var_' i]};
113 end
114end
115
116% responses
117
118if isstruct(varargin{iarg})
119 dresp=varargin{iarg};
120 iarg=iarg+1;
121
122% if iarg <= nargin && (iscell(varargin{iarg}) || ischar(varargin{iarg}))
123 if iarg <= nargin && iscell(varargin{iarg})
124 dresp=struc_desc(dresp,varargin{iarg});
125 iarg=iarg+1;
126 end
127
128 descr=cell (1,length(dresp));
129 lsamp=zeros(1,length(dresp));
130 for i=1:length(dresp)
131 lsamp(i)=length(dresp(i).sample);
132 end
133 sampr=zeros(max(lsamp),length(dresp));
134 sampr(:,:)=NaN;
135
136 for i=1:length(dresp)
137 descr(i)=cellstr(dresp(i).descriptor);
138 sampr(1:lsamp(i),i)=dresp(i).sample;
139 end
140else
141 sampr=varargin{iarg};
142 iarg=iarg+1;
143
144 if iarg <= nargin && iscell(varargin{iarg})
145 descr=varargin{iarg};
146 iarg=iarg+1;
147% elseif iarg <= nargin && ischar(varargin{iarg})
148% descr=cellstr(varargin{iarg});
149% iarg=iarg+1;
150 else
151 descr=cell(1,size(sampr,2));
152 end
153end
154
155for i=1:length(descr)
156 if isempty(descr{i})
157 descr(i)={['resp_' num2str(i)]};
158 end
159end
160
161% parameters
162
163while (iarg <= nargin-1)
164 if ischar(varargin{iarg})
165 if ~isempty(strmatch(varargin{iarg},...
166 {'nplotr','nplotc',...
167 'ymin','ymax','yscat'},...
168 'exact'))
169 eval([varargin{iarg} '=varargin{iarg+1};']);
170 disp([varargin{iarg} '=' any2str(varargin{iarg+1}) ';']);
171 else
172 warning([varargin{iarg} '=' any2str(varargin{iarg+1}) ' is not recognized.']);
173 end
174 else
175 error(['''' any2str(varargin{iarg}) ''' is not a parameter name.']);
176 end
177 iarg=iarg+2;
178end
179
180if ~exist('nplotr','var') && ~exist('nplotc','var')
181 nplotr=1;
182 nplotc=1;
183elseif ~exist('nplotr','var')
184 nplotr=ceil(size(sampr,2)*size(sampv,2)/nplotc);
185elseif ~exist('nplotc','var')
186 nplotc=ceil(size(sampr,2)*size(sampv,2)/nplotr);
187end
188
189%% filter, sort, and plot the data
190
191% while it would be preferable for the outer loop to be responses,
192% it is more efficient for the outer loop to be variables
193
194figure
195haxes=[];
196hplot=[];
197cdesc={};
198hscat=[];
199
200iplot=0;
201
202for ivar=1:size(sampv,2)
203 [vval,indxv,indxvi]=unique(sampv(:,ivar),'first');
204 indxv2=setdiff(1:size(sampv,1),indxv);
205
206 for iresp=1:size(sampr,2)
207
208% initialize the subplot
209
210 if (ivar*iresp == 1) || ...
211 (nplotr*nplotc > 1)
212 iplot=iplot+1;
213 haxes(end+1)=subplot(nplotr,nplotc,iplot);
214 hold all
215 end
216
217 hplot(end+1)=plot (sampv(indxv ,ivar),sampr(indxv ,iresp),'-x');
218 cdesc(end+1)={[descr{iresp} ' wrt ' descv{ivar}]};
219 if ~exist('yscat','var') || ...
220 (~strncmpi(yscat,'off',3) && ~strncmpi(yscat,'n',1))
221 hscat(end+1)=scatter(sampv(indxv2,ivar),sampr(indxv2,iresp),'+k');
222% see "controlling legends" in Matlab on-line docs
223% cdesc(end+1)={['constant ' descv{ivar}]};
224 set(get(get(hscat(end),'Annotation'),'LegendInformation'),...
225 'IconDisplayStyle','off'); % Exclude line from legend
226 end
227
228% add the annotation
229
230 if (ivar*iresp == size(sampv,2)*size(sampr,2)) || ...
231 (nplotr*nplotc > 1)
232 hold off
233
234 ylim('auto')
235 [ylims]=ylim;
236 if exist('ymin','var')
237 ylims(1)=ymin;
238 end
239 if exist('ymax','var')
240 ylims(2)=ymax;
241 end
242 ylim(ylims)
243
244 if (size(sampv,2) == 1) || (nplotr*nplotc > 1)
245 xlabc=descv{ivar};
246 else
247 xlabc='Variables';
248 end
249 if (size(sampr,2) == 1) || (nplotr*nplotc > 1)
250 ylabc=descr{iresp};
251 else
252 ylabc='Responses';
253 end
254 title([ylabc ' vs. ' xlabc],'Interpreter','none');
255 xlabel(xlabc,'Interpreter','none');
256 ylabel(ylabc,'Interpreter','none');
257
258 if (nplotr*nplotc == 1) && (size(sampv,2)*size(sampr,2) > 1)
259 legend(cdesc,'Location','EastOutside','Interpreter','none');
260 end
261 end
262 end
263end
264
265end
Note: See TracBrowser for help on using the repository browser.