【问题标题】:Errors when trying to adding points to a plot3尝试将点添加到 plot3 时出错
【发布时间】:2018-07-26 01:19:22
【问题描述】:

我正在尝试向 3D 绘图动态添加信息:

A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ];
y = [35 -10 -7]';
h = 0.01;
p = plot3(y(1),y(2),y(3),'.','EraseMode','none','MarkerSize',2);
axis([0 50 -25 25 -25 25])
hold on
while 1
    A(1,3) = y(2);
    A(3,1) = -y(2);
    ydot = A*y;
    y = y + h*ydot;
    set(p,'XData',y(1),'YData',y(2),'ZData',y(3))
    drawnow
end

我收到以下错误:

警告:不再支持 EraseMode 属性并且会出错 在未来的版本中。

在奇怪的吸引器(第 4 行)中警告:不再支持 EraseMode 属性,并将在未来的版本中出错。

在奇怪的吸引子(第 4 行)中使用 matlab.graphics.chart.primitive.Line/set 时出错 对象无效或已删除。

奇怪的吸引器中的错误(第 12 行) set(p,'XData',y(1),'YData',y(2),'ZData',y(3))

我了解我正在使用过时的语法来动态更新不再受支持的绘图。如何让它发挥作用?

请注意,我不想在循环内调用plot3,因为它会使绘图变慢并消耗大量内存。我希望调用 plot3 一次,然后在循环内的现有绘图中添加新点。新版本可以做吗?

Matlab 版本:R2018a

【问题讨论】:

  • 当您要动态添加信息时,您是否打算保留之前绘制的值?
  • 您想用plot3(y(1),y(2),y(3),'.','MarkerSize',2); 替换循环外的plot3 用法并用plot3(y(1),y(2),y(3),'.', 'MarkerSize',2); 替换set(.....): 吗?
  • 你如何期望一个没有中断条件的无限循环不占用所有内存?
  • 你在下面得到了一个很好的答案,但你也可以从plot3 调用中删除'EraseMode','none' 位,一切都应该像以前一样工作。毕竟这只是一个警告...错误消息是在您关闭窗口后才出现的,不是吗?

标签: matlab plot


【解决方案1】:

在您上面的评论中,当您说“这不起作用”时,您是什么意思?根据给定的文档链接直接修改您的代码可以按预期工作:

A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ];
y = [35 -10 -7]';
h = 0.01;
p = animatedline(y(1),y(2),y(3),'Marker','.','MarkerSize',2);
axis([0 50 -25 25 -25 25])
hold on
while 1
    A(1,3) = y(2);
    A(3,1) = -y(2);
    ydot = A*y;
    y = y + h*ydot;
    addpoints(p,y(1),y(2),y(3))
    drawnow
end

【讨论】:

  • 谢谢,现在可以使用了!我对 Matlab 很陌生,无法正确应用文档中的建议。 :)
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 2017-05-04
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多