annotate aim-mat/tools/@signal/plot.asv @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 74dedb26614d
children
rev   line source
tomwalters@0 1 % method of class @signal
tomwalters@0 2 %
tomwalters@0 3 % INPUT VALUES:
tomwalters@0 4 %
tomwalters@0 5 % RETURN VALUE:
tomwalters@0 6 %
tomwalters@0 7 %
tomwalters@0 8 % (c) 2003-2008, University of Cambridge, Medical Research Council
tomwalters@0 9 % Maintained by Tom Walters (tcw24@cam.ac.uk), written by Stefan Bleeck (stefan@bleeck.de)
tomwalters@0 10 % http://www.pdn.cam.ac.uk/cnbh/aim2006
tomwalters@0 11 % $Date: 2008-06-10 18:00:16 +0100 (Tue, 10 Jun 2008) $
tomwalters@0 12 % $Revision: 585 $
tomwalters@0 13
tomwalters@0 14 function rethandle=plot(sig,border,stil,ax)
tomwalters@0 15 % usage: handle=plot(sig,border,stil)
tomwalters@0 16 % plots the class signal. This plot works a little bit different from usual.
tomwalters@0 17 % Parameter can either be: plot(signal,stil) or plot(signal,border) or plot(signal,border,stil)
tomwalters@0 18 % the border can consist of times and y-value or only the times that should be plotted (in seconeds!)
tomwalters@0 19
tomwalters@0 20 if nargin<4
tomwalters@0 21 ax=gca;
tomwalters@0 22 end
tomwalters@0 23 if nargin<3
tomwalters@0 24 stil='b-';
tomwalters@0 25 end
tomwalters@0 26
tomwalters@0 27 if isfield(vargin{1}
tomwalters@0 28
tomwalters@0 29
tomwalters@0 30 sr=getsr(sig);
tomwalters@0 31 durationbin=size(sig.werte,1);
tomwalters@0 32 duration=durationbin/sr;
tomwalters@0 33 if nargin<2
tomwalters@0 34 t1=1;
tomwalters@0 35 t2=durationbin;
tomwalters@0 36 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 37 end
tomwalters@0 38
tomwalters@0 39 if isstruct(border) || isempty(border)
tomwalters@0 40 options=border;
tomwalters@0 41 t1=1;
tomwalters@0 42 t2=durationbin;
tomwalters@0 43 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 44 else
tomwalters@0 45 options=[];
tomwalters@0 46 if ischar(border)
tomwalters@0 47 stil=border;
tomwalters@0 48 t1=1;
tomwalters@0 49 t2=durationbin;
tomwalters@0 50 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 51 else
tomwalters@0 52 if isempty(border)
tomwalters@0 53 t1=1;
tomwalters@0 54 t2=durationbin;
tomwalters@0 55 border=[t1 t2 min(sig.werte(t1:t2)) max(sig.werte(t1:t2))];
tomwalters@0 56 else
tomwalters@0 57 t1=border(1);
tomwalters@0 58 t2=border(2);
tomwalters@0 59 x1=time2bin(sig,t1);
tomwalters@0 60 x2=time2bin(sig,t2);
tomwalters@0 61 nr=size(border,2);
tomwalters@0 62 if nr==2 % wenn nur die x-Werte angegeben werden
tomwalters@0 63 border=[x1 x2 min(sig.werte(x1+1:x2)) max(sig.werte(x1+1:x2))];
tomwalters@0 64 else
tomwalters@0 65 border(1)=x1;
tomwalters@0 66 border(2)=x2;
tomwalters@0 67 end
tomwalters@0 68 end
tomwalters@0 69 end
tomwalters@0 70 end
tomwalters@0 71
tomwalters@0 72 if ~isfield(options,'is_log');
tomwalters@0 73 is_log=0;
tomwalters@0 74 else
tomwalters@0 75 is_log=options.is_log;
tomwalters@0 76 end
tomwalters@0 77
tomwalters@0 78 if isfield(options,'minimum_time');
tomwalters@0 79 border(1)=time2bin(sig,options.minimum_time);
tomwalters@0 80 minimum_time=options.minimum_time;
tomwalters@0 81 else
tomwalters@0 82 minimum_time=bin2time(sig,border(1));
tomwalters@0 83 end
tomwalters@0 84
tomwalters@0 85 if isfield(options,'maximum_time');
tomwalters@0 86 border(2)=time2bin(sig,options.maximum_time);
tomwalters@0 87 maximum_time=options.maximum_time;
tomwalters@0 88 else
tomwalters@0 89 maximum_time=bin2time(sig,border(2));
tomwalters@0 90 end
tomwalters@0 91
tomwalters@0 92
tomwalters@0 93 % if the time scale is reversed (time from left to right)
tomwalters@0 94 if isfield(options,'time_reversed');
tomwalters@0 95 time_reversed=options.time_reversed;
tomwalters@0 96 else
tomwalters@0 97 time_reversed=0;
tomwalters@0 98 end
tomwalters@0 99
tomwalters@0 100 start_time=getminimumtime(sig);
tomwalters@0 101
tomwalters@0 102 min_x_screen=border(1); % einer wird abgezogen damit wir bei Null beginnen, nicht beim ersten bin, was blöde aussieht
tomwalters@0 103 max_x_screen=border(2);
tomwalters@0 104 minshowy=border(3);
tomwalters@0 105 maxy=border(4);
tomwalters@0 106
tomwalters@0 107 xvals=getxvalues(sig);
tomwalters@0 108 % if we are dealing with milliseconds (very often), then the units are in
tomwalters@0 109 % ms as well
tomwalters@0 110 if strfind(sig.unit_x,'(ms)')>0
tomwalters@0 111 multiplier=1000;
tomwalters@0 112 else
tomwalters@0 113 multiplier=1;
tomwalters@0 114 end
tomwalters@0 115
tomwalters@0 116
tomwalters@0 117 xvals=xvals.*multiplier;
tomwalters@0 118 yvals=getvalues(sig);
tomwalters@0 119
tomwalters@0 120 % this is the plotting command:
tomwalters@0 121 handle=plot(ax,xvals,yvals);
tomwalters@0 122
tomwalters@0 123 if time_reversed
tomwalters@0 124 set(ax,'XDir','reverse') % turn them around, because the higher values shell end on the right
tomwalters@0 125 else
tomwalters@0 126 set(ax,'XDir','normal') % normale ausrichtung
tomwalters@0 127 end
tomwalters@0 128
tomwalters@0 129 if is_log
tomwalters@0 130 set(ax,'XScale','log')
tomwalters@0 131 t=minimum_time*multiplier;
tomwalters@0 132 tix=[t 2*t 4*t 8*t 16*t 32*t 64*t 128*t 256*t 512*t 1024*t];
tomwalters@0 133 if ~isempty(sig.x_tick_labels)
tomwalters@0 134 ti=sig.x_tick_labels;
tomwalters@0 135 set(ax,'XTicklabel',ti);
tomwalters@0 136 end
tomwalters@0 137 set(ax,'XTick',tix);
tomwalters@0 138 else % its linear
tomwalters@0 139 set(ax,'XScale','linear')
tomwalters@0 140 end
tomwalters@0 141
tomwalters@0 142 miny=border(3);
tomwalters@0 143 maxy=border(4);
tomwalters@0 144 y=[miny maxy];
tomwalters@0 145 if miny==maxy
tomwalters@0 146 maxy=miny+1;
tomwalters@0 147 miny=miny-1;
tomwalters@0 148 end
tomwalters@0 149 axis([minimum_time*multiplier maximum_time*multiplier miny*1.05 maxy*1.05]);
tomwalters@0 150
tomwalters@0 151
tomwalters@0 152
tomwalters@0 153 xlabel(sig.unit_x);
tomwalters@0 154 ylabel(sig.unit_y);
tomwalters@0 155 title(sig.name,'Interpreter','none');
tomwalters@0 156
tomwalters@0 157 if nargout==1
tomwalters@0 158 rethandle=handle;
tomwalters@0 159 end
tomwalters@0 160
tomwalters@0 161 return