首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB滚动图

MATLAB滚动图
EN

Stack Overflow用户
提问于 2017-11-12 15:48:59
回答 1查看 1.4K关注 0票数 2

我有一个脑电数据库,我想画个图。数据库为19*1000*134汇总表,包括:

  • 19为频道数目。在第一种方法中,我只使用一个频道。
  • 1000样本的大小( 500赫兹采样率为1000个点,即2秒数据)
  • 134小时数(不同的2秒钟经验数)

它的思想是在同一张图上,在n-1之后再画出n个历元.(X,Y)矩阵用于绘制这个图有一个134000* not_much大小,我希望能够在这个图上水平滚动,看到每个时代。

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

代码语言:javascript
复制
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个时代(一种颜色=上面的一个时代)。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-12 22:19:13

这与我已经拥有的东西非常相似,所以我给你做了一些调整。基本上传递给plotData你的data矩阵。它将像现在一样按顺序绘制您的每个项目。

按下滑块会改变你的x限制,这样你就可以一次通过一个元素(历元)。点击这一区域,一次将推进两个时代。它目前只显示您当前在命令行disp(['Current Epoch: ' num2str(viewI)])上看到的“划时代”#,但是,您应该很容易将其重定向到图形上的文本框,以便更容易地知道您正在查看的是什么.除了精神上把x-极限除以2。

使用列表框切换到一个新的频道,这将重置情节&x-限制。

在命令行中这样调用它。

代码语言:javascript
复制
>> plotData( data )

代码:将下面的所有内容保存为plotData.m

代码语言:javascript
复制
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])

注意:这使用隐式展开,所以需要Matlab2016b或更高版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47250746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档