我有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个数据试验。
答案 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 getframe
和help movie
,以获得有关如何最好地使用这些命令的一些解释和示例。
希望这有帮助。