【问题标题】:How to plot several curves in MATLAB using handles如何使用句柄在 MATLAB 中绘制多条曲线
【发布时间】:2012-10-25 13:15:52
【问题描述】:

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

我找到了以下代码 它显示了如何绘制一组 YData。有没有人有想法将代码转换为两个或多个 Y 数据集,例如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;

【问题讨论】:

标签: matlab real-time handle lineseries


【解决方案1】:

如果你真的想使用句柄,下面的代码对我有用

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

此外,您可以按照 Andrey 的建议使用 set,而不是 refreshdata

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

【讨论】:

  • 非常感谢!对我来说,你的例子做到了!实时绘图现在可以显示多条曲线。很好的答案!
【解决方案2】:

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

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

其次,你应该做两个情节

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

并相应地更新每一个。

【讨论】:

  • 非常感谢安德烈。如果我做两个情节,那不是说会有两个数字吗?我是 Matlab 初学者,如果这个想法很愚蠢,请原谅我。
  • 安德烈,你为什么不使用refreshdata
  • @angainor,一个很好的问题。我只是把它写成问答stackoverflow.com/questions/13102654/…
【解决方案3】:

您是否正在寻找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);

坐标区会自动更新。

【讨论】:

  • 嘿弗洛里安。我读到在进行实时绘图时,使用句柄应该更有效。除此之外,坚持冻结我的斧头(我相信最后如此),这是我不想要的。除了我无法绘制多条线之外,该实现与句柄配合得很好。
  • @user1677716 hold on 不会冻结您的坐标区。
  • @user1677716:您可以将hold 与句柄一起使用,请参阅我的编辑。此外,正如 angainor 所指出的,轴仍会自动更新。
  • 如果你喜欢hold,“hold on”会给你多条相同颜色的曲线。使用“hold all”来获得不同颜色的曲线(就像你用一个 plot 命令绘制了所有曲线一样)。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多