我想知道有没有人知道如何制作x=(1000个点的数据集)和y=(1000个点的数据集)的动画图。
最大的问题是这些是我试图绘制的数据集,或者说是x、y坐标,而不是函数,如果是函数的话,我知道如何通过动画来绘制。
我尝试使用for循环中的帧,但它只给我点,而没有将它们连接成一条线形图,所以我无法观察轨迹的路径。
我使用的代码是:
for i = 1:length(DATASET1)
pause(0.1)
plot(DATASET1(i),DATASET2(i))
draw on
end
我想知道有没有人知道如何制作x=(1000个点的数据集)和y=(1000个点的数据集)的动画图。
最大的问题是这些是我试图绘制的数据集,或者说是x、y坐标,而不是函数,如果是函数的话,我知道如何通过动画来绘制。
我尝试使用for循环中的帧,但它只给我点,而没有将它们连接成一条线形图,所以我无法观察轨迹的路径。
我使用的代码是:
for i = 1:length(DATASET1)
pause(0.1)
plot(DATASET1(i),DATASET2(i))
draw on
end
如果你想让图表逐渐“增长”:最简单的方法是创建一个空的图表,然后在每个迭代中更新其XData
和YData
属性:
h = plot(NaN,NaN); %// initiallize plot. Get a handle to graphic object
axis([min(DATASET1) max(DATASET1) min(DATASET2) max(DATASET2)]); %// freeze axes
%// to their final size, to prevent Matlab from rescaling them dynamically
for ii = 1:length(DATASET1)
pause(0.01)
set(h, 'XData', DATASET1(1:ii), 'YData', DATASET2(1:ii));
drawnow %// you can probably remove this line, as pause already calls drawnow
end
这是一个例子1,使用DATASET1 = 1:100; DATASET2 = sin((1:100)/6);
得到。
1 如果有人感兴趣,该图是一个动态GIF,可以通过在循环之后添加以下代码(来自此处)并在drawnow
行之后运行来创建:
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if ii == 1;
imwrite(imind,cm,filename,'gif','Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
抱歉,提供的内容无法翻译成清晰的意思。这是一个空的 HTML 标签,没有足够的上下文来理解其含义和目的。看起来你很接近了。但是不确定draw on
是什么命令。
看看这里的代码是否能激发你解决问题的灵感 -
%// Sample x and y values assumed for demo.
x = 1:1000;
y = x.^2;
%// Plot starts here
figure,hold on
%// Set x and y limits of the plot
xlim([min(x(:)) max(x(:))])
ylim([min(y(:)) max(y(:))])
%// Plot point by point
for k = 1:numel(x)
plot(x(k),y(k),'-') %// Choose your own marker here
%// MATLAB pauses for 0.001 sec before moving on to execue the next
%%// instruction and thus creating animation effect
pause(0.001);
end
plot(x,y,'-')
- Divakardraw on
" 本意是 drawnow
。通常需要使用该函数来告诉 Matlab 刷新图形事件队列并强制绘制你的图像。在你的代码中,你不需要使用 drawnow
,因为它会被 pause
隐式调用。 - Luis Mendo