我的代码中有一个循环,我想绘制一些变量,
在每次迭代中,我都会绘制一个新点,并希望将其连接到上一个点。
这是一个示例代码(在此代码中,循环是不必要的,但在实际代码中则不是)。
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
和使用4
点line
)。
我似乎不是一个简单的问题,也许我错过了一些东西。
谢谢你的帮助。
这类似于@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
成块地填充,或者使用XData
和YData
作为循环缓冲区,方法ii = mod(i,100);
是将其用作索引(例如),这将产生示波器类型的效果。同样,持续不断地计算轴极限会产生时间损失。
如果您不知道向量将要运行多长时间(例如,如果在while
循环中),则可以预先分配一个您知道会更长的向量,按块分配,或者只做循环缓冲区。
对于多个图,预分配line
功能可用于每条附加线。与不同plot
,您可以直接将更原始的line
函数包装在函数中handle
。
请注意,如果您使用的是MATLAB 2014b或更高版本(我不是),则新的HG2图形系统将对象用于句柄而不是双精度,因此handle
将数字句柄转换为对象句柄的命令是多余的,并且点符号可以直接使用。另请注意,handle
这种方式使用的是未记录的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句