随着时间的推移渲染绘图作为窗口

时间:2014-10-07 20:38:28

标签: matlab

我是MatLab的新手,所以提前道歉......奇怪的是,我没有在网上找到太多帮助。我想将时间序列图绘制为随着时间的推移显示窗口的电影。在给定的时刻,它显示了该时间点的情节以及前后几秒钟。

我尝试过此代码,其中之前已定义过data,sampRate等内容:

index = (1:nSamples)/sampRate + startTimeSec;

figure('name',fileName);
title('Seismic');
plot(index,data,'r*');

writerObj = VideoWriter('c:\temp\movie.avi');
open(writerObj);

fig = figure('name',fileName);
title('Seismic');
window = 200; %samples
for i=1:nSamples
    first = max([i-window/2,1]);
    last = min([i+window/2,nSamples]);
    clf;
    plot(index(first:last),data(first:last),'r*');
    writeVideo(writerObj,getframe(fig));
end
close(writerObj);

它使用错误

轰炸了writeVideo
  

使用capturescreen时出错

     

传递给getframe的矩形必须至少部分在屏幕上

     

getframe出错(第105行)

x=builtin('capturescreen', varargin{:}); 
     

PlotData出错(第60行)

     

writeVideo(writerObj,的getFrame(图));

我做错了什么?

2 个答案:

答案 0 :(得分:0)

为什么需要clf命令? getframe的文档读取" getframe返回一个电影帧。框架是当前轴的快照。"你的clf命令摆脱了图中的轴,因此错误。删除clf,它应该工作!

答案 1 :(得分:0)

您已拨打figure两次。第一次调用就足够了,所以摆脱这句话:

fig = figure('name', fileName);

另外,摆脱无关的clf调用,因为你的绘图内容将在循环的每次迭代中被改变,因此在你把东西放入其中之前不需要清除当前的数字。我怀疑你的绘图框是在后台,在你将帧写入文件之前需要将它显示为焦点的当前帧。因此,尝试将帧置于焦点,然后调用writeVideo。换句话说,使用以下修改的代码。在我改变的任何地方,我都发表了评论:

index = (1:nSamples)/sampRate + startTimeSec;

figure('name',fileName);
title('Seismic');
plot(index,data,'r*');

writerObj = VideoWriter('c:\temp\movie.avi');
open(writerObj);

%// Remove this
% fig = figure('name',fileName);
window = 200; %samples
for i=1:nSamples
    first = max([i-window/2,1]);
    last = min([i+window/2,nSamples]);
    %// Remove this as well
    % clf;
    figure(1); %// Put frame in focus
    plot(index(first:last),data(first:last),'r*');
    %// Put title here
    title('Seismic');

    %// Change.  Just using getframe by default
    %// will call the current frame in focus
    writeVideo(writerObj,getframe);
end
close(writerObj);