2012-10-25 78 views
3

我正在MATLAB中实时绘制数据。我想用一个句柄。我的问题是我不知道如何绘制多个Y数据曲线。我发现下面的代码 它显示了如何绘制一组YData。有没有人想到将代码转换成两个或更多的Y-数据集,例如sind(x)作为曲线中的附加曲线?如何在MATLAB中使用手柄绘制几条曲线

x = 1:1000; 
y = cosd(x); 

xi = x(1); 
yi = y(1); 
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi'); 

for k = 2:1000... 
xi = x(1:k); 
yi = y(1:k); 
refreshdata(h, 'caller'); 
drawnow; 
end; 
+0

相关:http://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab –

回答

2

下面的代码工作对我来说,如果你真的想用处理

x = 1:1000; 
y = cosd(x); 
y2 = sind(x); 

xi = x(1); 
yi = y(1); 
yi2 = y2(1); 
figure(1); clf; 
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi'); 
hold on; 
h2 = plot(xi, yi2, 'YDataSource', 'yi2', 'XDataSource', 'xi'); 

for k = 200:1000 
    xi = x(1:k); 
    yi = y(1:k); 
    yi2 = y2(1:k); 
    refreshdata(h); 
    refreshdata(h2); 
    drawnow; 
end; 

你确实需要一个hold on

另外,代替refreshdata可以使用set为安德烈·建议:

set(h,'Xdata',xi,'YData',yi); 
set(h2,'Xdata',xi,'YData',yi2); 
+0

非常感谢!对我来说,你的榜样做到了!实时绘图现在可以显示多条曲线。好的答案! – user1677716

3

首先,千万不要使用refreshdata。改为使用直接set方法。

 set(h,'Xdata',xi,'YData',yi); 

其次,你应该做两个地块

 h1 = plot(xi, yi); 
     h2 = plot(xi, yi); 

并相应更新每一个。

+0

非常感谢Andrey。如果我做两个地块,那不是说会有两个数字?我是一个Matlab初学者,所以请原谅我,如果这个想法是愚蠢的。 – user1677716

+0

安德烈,你为什么不使用'refreshdata'? – angainor

+0

@ anainor,一个很好的问题。我只是写它作为问题和答案http://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab。 –

1

您是否在寻找hold command

plot(1 : 10, (1 : 10).^2, 'r') 
hold on 
plot(1 : 10, (1 : 10).^3) 

编辑:

您可以结合使用holdset更新图(见Andrey's答案):

h1 = plot(1 : 10, (1 : 10).^2, 'r'); 
hold on; 
h2 = plot(1 : 10, (1 : 10).^3); 
set(h1, 'XData', 1 : 2 : 20); 
set(h2, 'YData', 0.1 * (1 : 20).^3); 

的轴将自动更新。

+0

嘿弗洛里安。我读到,在做实时绘图时,它应该更有效地使用手柄。除此之外,坚持冻结我的斧头(我最终相信),这是我不想要的。除了我无法绘制多条线的事实之外,执行效果很好。 – user1677716

+0

@ user1677716'hold on'不会冻结您的轴。 – angainor

+0

@ user1677716:您可以使用'hold'和句柄,看看我的编辑。另外,正如angainor指出的那样,这些轴仍然会自动更新。 –

0

如果你不关心显示相同颜色的所有曲线太多,只需将X数据连接成一个单一的载体在曲线组件之间用NaN隔开(对y数据做类似的事情)。然后,“绘图”命令可以接受这些较大的x和y向量,并将一次显示所有内容。您可以通过做与colordata数组类似的事情来解决颜色问题。