MATLAB中的连续图

拉希德

我的代码中有一个循环,我想绘制一些变量,

在每次迭代中,我都会绘制一个新点,并希望将其连接到上一个点。

这是一个示例代码(在此代码中,循环是不必要的,但在实际代码中则不是)。

n  = 500;
Fs = 1000;
f1 = 10;
t  = 0;
dt = 1 / Fs;
for i = 1 : n
    s = sin(2 * pi * f1 * t);
    t = t + dt;
    plot(t,s,'bo'); hold on;
    axis([0 t(end) -1 1]);
end

在此处输入图片说明

正确的就是我想要的。

我考虑过使用,line但是会变得凌乱(我必须在每个命令中更改i和使用4line)。

我似乎不是一个简单的问题,也许我错过了一些东西。

谢谢你的帮助。

克雷基姆

这类似于@Nras的答案,但更快,更容易阅读。我有几个程序可以执行此类操作,并且根据计算循环的时间长短,图形更新实际上可能是一个重要且烦人的瓶颈。

如果您知道向量最终将要保留多长时间,则可以预先分配绘图,然后使用以下handle命令进行更新

n  = 500;
Fs = 1000;
f1 = 10;
t  = 0;
dt = 1 / Fs;

s = nan(1,n);
emptyvec = nan(1,n);
h1 = plot(emptyvec,emptyvec,'-bo');
h2 = handle(line(emptyvec,emptyvec,'Color','r','Marker','x','LineStyle','--'));
h1 = handle(h1);


for i = 1 : n
    t = t + dt;
    s = sin(2 * pi * f1 * t);
    h1.XData(i) = t;
    h1.YData(i) = s;
    h2.XData(i) = t;
    h2.YData(i) = s^2;
    drawnow
end

在计算限制时,MATLAB会忽略“ nan”,因此预先分配withnan会使调用变得xlim不必要。另外,pause运行此命令时不需要。你的旅费可能会改变。我个人更喜欢这样做:

h = plot(t,emptyvec);

只要t知道并且不疯狂,这不仅让我对计算的方式有了一个想法,而且给了我一种进度条。如果疯狂了,我可能会t成块地填充,或者使用XDataYData作为循环缓冲区,方法ii = mod(i,100);是将其用作索引(例如),这将产生示波器类型的效果。同样,持续不断地计算轴极限会产生时间损失。

如果您不知道向量将要运行多长时间(例如,如果在while循环中),则可以预先分配一个您知道会更长的向量,按块分配,或者只做循环缓冲区。

对于多个图,预分配line功能可用于每条附加线。与不同plot,您可以直接将更原始的line函数包装在函数中handle

请注意,如果您使用的是MATLAB 2014b或更高版本(我不是),则新的HG2图形系统将对象用于句柄而不是双精度,因此handle将数字句柄转换为对象句柄命令是多余的,并且点符号可以直接使用。另请注意,handle这种方式使用的是未记录的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章