我正在尝试向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属性,并且会出错 在将来的版本中。
在strange_attractor中(第4行)警告:不再支持EraseMode属性,并且在以后的版本中将出错。
在unique_attractor中(第4行),使用matlab.graphics.chart.primitive.Line / set出错。无效或已删除的对象。
stranger_attractor错误(第12行) set(p,'XData',y(1),'YData',y(2),'ZData',y(3))
我知道我正在使用过时的语法来动态更新不再受支持的绘图。我该如何运作?
请注意,我不想在循环内调用plot3
,因为它会使绘图变慢并且占用大量内存。我希望调用一次plot3,然后在循环内将新点添加到现有图中。可以在新版本中完成吗?
Matlab版本:R2018a
答案 0 :(得分:3)
在上面的评论中,当您说“这不起作用”时,您是什么意思?根据给定的文档链接,直接修改您的代码即可:
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