MATLAB 根据数据绘制动画线图

标签 matlab animation line

我在 DAQ 上记录了 30 个实验,并使用 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 次试验的数据。

最佳答案

使用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选项来控制生成视频的质量。

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

关于MATLAB 根据数据绘制动画线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418385/

相关文章:

objective-c - 带有动画的 iOS 方法调用,完成时执行操作?

matlab - 如何将矩阵的每一行插入 Matlab 中的单元格?

arrays - R 与 MATLAB 中高维数据结构化的方法论

java - 通过 IB API 请求外汇数据(指定的目标交易所无效)

c# - 动画停止后直接调用函数 - Unity

javascript 和 CSS 动画冲突 - 翻译不起作用,不透明度起作用

matlab - 在 Matlab 中重复向量的最有效方法

swift - 如何快速打印空行

Python - 根据条件读取文本文件中的特定行

file - bash 从文件中永久删除一行