如何使用MATLAB中的句柄绘制多条曲线

3

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

我找到了以下代码,它展示了如何绘制一组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;

相关:https://dev59.com/Wmcs5IYBdhLWcg3wJQi7 - Andrey Rubshtein
4个回答

3

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

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

其次,您应该绘制两个图表。
      h1 = plot(xi, yi);
      h2 = plot(xi, yi);

并相应更新每个条目。


非常感谢您迄今为止的帮助,安德烈。如果我绘制两个图,那不是意味着会有两个图形吗?我是Matlab初学者,如果这个想法很愚蠢,请原谅我。 - user1677716
安德烈,你为什么不应该使用 refreshdata - angainor
@angainor,非常好的问题。我只是将其写成了问题和答案https://dev59.com/Wmcs5IYBdhLWcg3wJQi7。 - Andrey Rubshtein

3
以下代码对我有用,如果你真的想使用handles。
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;

你需要一个“控制”。

此外,你可以像Andrey建议的那样使用set代替refreshdata

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

非常感谢!你的示例对我很有帮助!实时绘图现在可以显示多条曲线了。非常好的答案! - user1677716

1

您是否正在寻找hold命令

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);

轴将自动更新。


嗨,弗洛里安。我读到实时绘图时使用句柄应该更有效率。除此之外,保持冻结我的轴(我相信至少是这样),这不是我想要的。使用句柄的实现效果很好,但我无法绘制多条线。 - user1677716
@user1677716,hold on不会冻结你的坐标轴。 - angainor
@user1677716:你可以将hold与handles一起使用,参见我的编辑。另外,正如angainor指出的那样,轴仍将自动更新。 - Florian Brucker
3
如果您喜欢保留曲线,那么使用“hold on”将在相同颜色下为您提供多个曲线。使用“hold all”则会获得不同颜色的曲线(就像您使用一个plot命令绘制了所有曲线一样)。 - engineerC

0

如果您不太关心为所有曲线显示相同的颜色,只需将x数据连接成单个向量,曲线组件之间用NaN分隔(对y数据执行类似操作)。然后,“plot”命令可以接受这些更大的x和y向量,并将一次性显示所有内容。您可以通过对colordata数组执行类似操作来解决颜色问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接