首页 > 解决方案 > 尝试将点添加到 plot3 时出错

问题描述

我正在尝试将信息动态添加到 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 行)集合中的错误(p,'XData',y(1),'YData',y(2),'ZData',y(3))

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

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

Matlab版本:R2018a

标签: matlabplot

解决方案


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

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

在此处输入图像描述


推荐阅读