如何使用句柄在MATLAB中绘制几条曲线

时间:2012-10-25 13:15:53

标签: matlab real-time handle lineseries

我正在MATLAB中实时绘制数据。我想用一个手柄。我的问题是我不知道如何绘制多个Y数据曲线。

我找到了以下代码 它显示了如何绘制一组YData。有没有人想过将代码转换成两个或更多个Y-Datasets,例如sind(x)作为图中的附加曲线?

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;

4 个答案:

答案 0 :(得分:3)

首先,永远不要使用refreshdata。请改用直接set方法。

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

其次,你应该做两个地块

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

并相应地更新每一个。

答案 1 :(得分: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);

答案 2 :(得分: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);

轴将自动更新。

答案 3 :(得分:0)

如果您不太关心为所有曲线显示相同的颜色,只需将x数据连接到曲线组件之间由NaN分隔的单个向量(对y数据执行类似的操作)。那么"情节"命令可以接收这些较大的x和y向量,并一次显示所有内容。您可以通过使用与colordata数组类似的操作来解决颜色问题。