这与我已经拥有的东西非常相似,所以我为你们调整了一下。基本上是将绘图数据传递给
data
矩阵它将按顺序绘制每个项目,就像您现在已经绘制的那样。
按下滑块将更改您的x限制,以便一次通过1个元素(历元)。点击该区域将一次前进2个时代。它当前只显示您当前在命令行上查看的“epoch”
disp(['Current Epoch: ' num2str(viewI)])
然而,您应该可以很容易地将其重定向到图上的文本框,以便更容易地了解您正在查看的内容。。。除了精神上把x极限除以2。
使用列表框切换到新通道,该通道将重置绘图;x极限。
在命令行中这样调用它。
>> plotData( data )
代码:将以下所有内容保存为plotData。m
function plotData( data )
% data = rand(19,1000,134);
f = figure('Units','Normalized','Position',[0.25 0.25 0.5 0.5]);
a = axes('Units','Normalized','Position',[0.05 0.15, 0.75 0.75]);
s = uicontrol(f, 'Style','Slider', 'Units','Normalized','Position',[0.05 0.025, 0.75 0.05],...
'Min',1,'Max',size(data,3),'Value',1, 'Callback',{@sliderChange,a} );
l = uicontrol(f, 'Style','listbox','Units','Normalized','Position',[0.85 0.15, 0.1, 0.75],...
'String',cellstr(num2str([1:size(data,1)]')),'Callback',{@changeChannel,a,s,data} );
stepSize = 1/(s.Max - s.Min);
s.SliderStep = [stepSize 2*stepSize];
changeChannel(l,[],a,s,data)
function changeChannel(l,evtData,a,s,data)
cla(a);
chanNum = str2double(l.String{l.Value});
sR = 500; %500Hz
tempData = reshape(data(chanNum,:,:),[],size(data,3)); %Reshape each epoch into a column
tempTime = [0:1/sR:(size(data,2)-1)/sR]' + (0:1:size(data,3)-1)*2; %Build time array
plot(a,tempTime,tempData) %plot all the lines
s.Value = 1; %Rest Slider Position
function sliderChange(s,evtData,a)
viewI = round(s.Value);
disp(['Current Epoch: ' num2str(viewI)])
xlim(a,[(viewI-1)*2 viewI*2] + [-.1 .1])
注意:这使用隐式展开,因此需要Matlab 2016b或更高版本。