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
|