MATLAB根据数据动画线条图

时间:2012-07-10 17:09:45

标签: matlab animation line

我有30个实验性试验,我登录DAQ并使用xlsread将其读入MATLAB。

我现在有一个情节,我在一个数字上显示所有30个试验。

我想要做的是创建一个电影,它会逐一显示它们。

实际上我总共有60个线图(30个输入和30个输出),所以如果我能显示输入和输出一个,然后是下一个,那就太棒了。

现在我的代码与此类似:

In_1 = xlsread(filename.xls, #1);
In_2 = xlsread(filename.xls, #2);
...

Out_1 = xlsread(filename.xls, #1);
Out_2 = xlsread(filename.xls, #2);
...
plot(t, In_1,'r')
plot(t, Out_1)
plot(t, In_2,'r')
plot(t, Out_2)
...

我见过很多使用getframe和movie的例子。这对我没有帮助,因为我正在绘制数据。不是在一段时间间隔内评估的函数。我试图绘制30个数据试验。

3 个答案:

答案 0 :(得分:1)

这是一个应该满足您需求的简单示例。

注意:这将创建一个.avi文件,您可以在之后的大多数多媒体播放器中查看。

%% Open avi file
aviobj = avifile('fileame.avi','compression','none','fps',framerate);

%% Add one frame at a time
for frame = 1:length(frames)             

    h = figure(1);
    % Plot what ever you want here...

    % Fetch frame
    aviobj = addframe(aviobj, getframe(h));
end

%% Close video
aviobj = close(aviobj);

如果您希望输入和输出绘制在两个不同的轴上,则可以使用subplot

h = figure(1);
subplot(2,1,1)
% Plot input here...
subplot(2,1,2)
% Plot output here...

答案 1 :(得分:1)

使用avifile创建AVI文件,然后使用addframe捕获您绘制的每个绘制图形并将其转换为帧。我还冒昧地添加subplots以将两个图保持在同一图中,并将代码重写为循环。

这是我的(修订的)建议解决方案:

aviobj = avifile('output.avi');                     %# Create an AVI file
hh = figure;
for i = 1:30
    figure(hh)                                      %# Reuse the figure
    subplot(2, 1, 1)
    eval(['plot(t, In_', num2str(i), ', ''r'')']);  %# Plot i-th input
    %# axis([ something ]);
    subplot(2, 1, 2)
    eval(['plot(t, Out_', num2str(i), ', ''r'')']); %# Plot i-th output
    %# axis([ something ]);
    aviobj = addframe(aviobj, getframe(hh));        %# Convert to a frame
end
aviobj = close(aviobj);                             %# Close the AVI file

您可以使用avifile选项来控制生成视频的质量。

Alos请注意,每个plot根据绘制的值设置x和y轴。如果要保持动画“平滑”,则必须使用axis命令在每个绘图后强制每个图形的轴保持不变。

答案 2 :(得分:0)

最简单的方法是在for循环中使用getframe命令将每个绘图放在一个框架中然后使用movie命令播放它们,这有一些优点(你可以导出结果作为avi,例如)但有时候它很慢,如果你想简单地在matlab中查看动画并且需要它稍快一点,你可以刷新绘图窗口中的数据并重绘它,它有点复杂但在Link这里解释得很清楚。

另外,在matlab中输入help getframehelp movie,以获得有关如何最好地使用这些命令的一些解释和示例。

希望这有帮助。