MATLAB滚动图

时间:2017-11-12 15:49:00

标签: matlab plot scroll matlab-figure

我有一个想要绘制的EEG数据库。 该数据库是一个19 * 1000 * 134矩阵,其中包含:

  • 19是频道数。在第一种方法中,我只使用一个频道。
  • 样本大小1000(500 Hz采样率1000点,即2秒数据)
  • 134个纪元数(不同的2秒经历数)

这个想法是在同一个图表上的纪元n-1之后绘制纪元n。用于绘制它的(X,Y)矩阵有134 000 * not_much大小,我希望能够在绘图上水平滚动,以单独查看每个时代。

我的代码现在只绘制一个频道:

fs = s_EEG.sampling_rate;
[channel, length, nb_epoch] = size(s_EEG.data)

display(s_EEG.data, fs, length, channel, nb_epoch)

function display(data, fs, length, channel, nb_epoch)
    figure("Name", "Epoch display")

    for j = 1:nb_epoch
        time = 0.002+(2*j-2):1/fs:2*j;
        epoch = data(1,:,j);
        plot(time, epoch)
        hold on
    end
    hold off

end

当前输出: Current output

我对Matlab完全不熟悉,我还没有很好地使用它,但我希望找到一种方法,可以在同一个图表上单独查看,并以正确的可视化比例查看所有134个时代(一种颜色=上面一个时期)。

谢谢!

1 个答案:

答案 0 :(得分:1)

这与我已经拥有的东西非常相似所以我稍微调整了一下。基本上将plotData传递给你的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或更高版本。