MATLAB 滚动图

MATLAB scrolling plot

我有一个 EEG 数据库,我想绘制它。 数据库是一个19*1000*134的矩阵,有:

我们的想法是在同一张图上紧接第 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

当前输出:

我是 Matlab 的新手,我还没有很好地使用它,但我想找到一种方法来在同一张图上以正确的可视化比例单独查看我的所有内容134 个纪元(一种颜色 = 上面的一个纪元)。

谢谢!

这与我已有的非常相似,因此我为您稍微调整了一下。基本上将 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 或更高版本。