如何在matlab中进行动画绘制

如何在matlab中进行动画绘制,matlab,animation,Matlab,Animation,我想知道是否有人知道如何制作动画情节 x=(1000点数据集) y=(1000点数据集) 绘图(x,y) 最大的问题是,这些是我试图绘制的数据集,或者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)

最大的问题是,这些是我试图绘制的数据集,或者x,y坐标,而不是我知道如何通过动画绘制的函数

我试着在for循环中做帧,但它给了我点,并且没有把它们连接在一个线图中,所以我不能真正地观察被描绘出来的路径

我用的代码是

for i = 1:length(DATASET1)
pause(0.1)
plot(DATASET1(i),DATASET2(i))
draw on
end

看起来你很接近。但不确定
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

如果您希望绘图逐点“增长”:最简单的方法是创建一个空绘图,然后在每次迭代时更新其
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获得;数据集2=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

自R2014b以来,您可以使用
annimatedline
对象(和),这意味着可以很好地处理动画图形。基本上,
annimatedline
对象具有一个
addpoints
函数,该函数在不必重新定义现有点的情况下将新点添加到线中,同时还具有一个
clearpoints
函数,该函数为更复杂的动画清除线

以下是一个例子:

h = animatedline;
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)  
    addpoints(h,x(k),y(k));
    drawnow
end

您尝试的代码中有哪些不起作用?这不是绘图命令。。。。您应该编辑帖子(标签下方有链接),以包含到目前为止所有的代码。您可以通过单击
{}
按钮、按
CTRL-K
或将代码缩进4个空格来设置代码格式感谢您没有这样做..由于某些原因,我无法在注释中使用该格式的代码。如果我去回答这个问题,我可以,但我必须等8个小时才能回答。。抱歉,我将尝试将其包含在我的问题中。您最好将其编辑到问题中,而不是在评论中发布:-)很好地解决了您的问题非常感谢您的帮助。。由于某些原因,它不会做我的绘图我修改了它设置x=DATASET1和y=DATASET2轴正在向上移动,但没有在轴上绘制任何东西。最大的问题是我可以得到要更新的“点”,但它不会形成一个折线图,让我看到在循环退出后创建的路径-
绘图(x,y,'-'))
@branny12000如果代码对您有效,请告诉我。我会相应地更新我的解决方案。也许原来的“
利用
”是有意的。这通常需要告诉Matlab刷新图形事件队列,并强制它现在绘制绘图。但是,在代码中不需要
drawnow
,因为它是由
pause
@Divakar-Yep隐式调用的。我用过,太酷了!只是为了分享动画gif你有我的+1@natan谢谢我通常讨厌动画GIF太分散注意力。。。但我无法抗拒:-)@SanthanSalai谢谢!