source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/lightspeed/graphics/labeled_curves.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

  • Property svn:executable set to *
File size: 4.2 KB
Line 
1function labeled_curves(x,y,varargin)
2%LABELED_CURVES   Draw multiple curves in different colors with labels.
3% LABELED_CURVES(X,Y) plots multiples curves in different colors, with
4% a legend and good axes (using AXIS_PCT).
5% There are multiple ways to specify X and Y.
6%
7% In the simplest case, every curve has the same x-coordinates, so X is
8% just a vector and Y is a matrix.  Y can also be a structure where each
9% field is a vector of y-coordinates (of equal lengths).
10%
11% If curves have different x-coordinates then X should be a structure where
12% each field is a vector of x-coordinates, and Y is a corresponding structure
13% where each field is a vector of y-coordinates.
14%
15% LABELED_CURVES(X,Y,'color',COLOR) uses the given colors.
16% COLOR is either a cell array of linespec strings (as in PLOT),
17% a matrix of RGB triples (as in COLORMAP), or a structure where each field
18% is either a linespec string or RGB triple.
19%
20% If you are making multiple plots, you can collect all the color
21% specifications into a single color structure, which ensures the coloring
22% of a particular curve is consistent among plots.
23%
24% By default, the structure field names are used as labels.  Alternatively,
25% you can specify labels as an optional argument:
26%
27% LABELED_CURVES(X,Y,...,'labels',LABELS) uses the given labels for the legend
28% (LABELS is a cell array of strings). Otherwise the field names are used. 
29%
30% LABELED_CURVES(X,Y,...,'plotfun',PLOTFUN) uses PLOTFUN instead of 'plot' to
31% draw the curves.  For example, 'semilogx', 'semilogy', or 'loglog'.
32%
33% LABELED_CURVES(X,Y,...,'mobile',1) uses MOBILE_TEXT instead of
34% LEGEND, for more accurate placement of labels.
35%
36% Example:
37%   x = linspace(0,6,100);
38%   y = [sin(x); cos(x)];
39%   labeled_curves(x,y,'labels',{'sin' 'cos'})
40%   color = {'g' 'b'};
41%   labeled_curves(x,y,'color',color,'labels',{'sin' 'cos'})
42%   color = [0 1 0; 0 0 1];
43%   labeled_curves(x,y,'color',color,'labels',{'sin' 'cos'})
44%
45%   y=struct;color=struct;
46%   y.sin = sin(x);
47%   y.cos = cos(x);
48%   color.sin = 'g';
49%   color.cos = 'b';
50%   labeled_curves(x,y,'color',color)
51%   labeled_curves(x,y,'color',color,'plotfun','semilogx','mobile',1)
52%
53%   xcoord = struct;
54%   xcoord.sin = x;
55%   xcoord.cos = x;
56%   xcoord.tan = linspace(2,4,100);
57%   y.tan = tan(xcoord.tan);
58%   color.tan = [1 0 0];
59%   labeled_curves(xcoord,y,'color',color)
60%
61% See also PLOT, LEGEND, MOBILE_TEXT, AXIS_PCT, LINECHART
62
63% Written by Tom Minka
64% (c) Microsoft Corporation. All rights reserved.
65
66args = makestruct(varargin);
67default_args = struct('color',[],'labels',[],'plotfun','plot','mobile',0,'dotstyle','.');
68args = setfields(default_args,args);
69color = args.color;
70labels = args.labels;
71plotfun = args.plotfun;
72mobile_flag = args.mobile;
73dotstyle = args.dotstyle;
74
75if ~isstruct(y)
76  a = y;
77  y = struct;
78  for i = 1:rows(a)
79    y.(sprintf('V%d',i)) = a(i,:);
80  end
81end
82if isempty(color)
83  n = length(fieldnames(y));
84  color = jet(n);
85  color = hsv(n);
86end
87if ~isstruct(color)
88  a = color;
89  color = struct;
90  fields = fieldnames(y);
91  if iscellstr(a)
92    for i = 1:length(a)
93      color.(fields{i}) = a{i};
94    end
95  else
96    for i = 1:rows(a)
97      color.(fields{i}) = a(i,:);
98    end
99  end
100end
101if isempty(labels)
102  labels = fieldnames(y);
103end
104
105lastx = struct;
106lasty = struct;
107h = [];
108for f = fieldnames(y)'
109  field = char(f);
110  if isstruct(x)
111    thisx = x.(field);
112  else
113    thisx = x;
114  end
115  thisy = y.(field);
116  thiscolor = color.(field);
117  if ischar(thiscolor)
118    h(end+1) = feval(plotfun,thisx,thisy,thiscolor);
119    hold on
120    if ~isempty(dotstyle)
121      feval(plotfun,thisx,thisy,[thiscolor dotstyle]);
122    end
123  else
124    h(end+1) = feval(plotfun,thisx,thisy);
125    set(h(end),'Color',thiscolor);
126    hold on
127    if ~isempty(dotstyle)
128      hh = feval(plotfun,thisx,thisy,dotstyle);
129      set(hh,'Color',thiscolor);
130    end
131  end
132  lastx.(field) = thisx(end);
133  lasty.(field) = thisy(end);
134end
135hold off
136axis_pct;
137f = fieldnames(y);
138legend(h,labels)
139if mobile_flag
140  legend off
141  h = mobile_text(labels{:});
142  for i = 1:length(h)
143    set(h(i),'Position',[lastx.(f{i}) lasty.(f{i})]);
144  end
145end
Note: See TracBrowser for help on using the repository browser.