3

我在 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;
4

4 回答 4

3

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

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);
于 2012-10-25T13:52:43.777 回答
3

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

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

其次,你应该做两个情节

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

并相应地更新每一个。

于 2012-10-25T13:20:06.987 回答
1

您是否正在寻找hold命令

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

编辑:

您可以hold结合使用set来更新情节(另见安德烈的回答):

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

轴将自动更新。

于 2012-10-25T13:25:18.543 回答
0

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

于 2014-05-20T16:44:03.887 回答