【发布时间】: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'位,一切都应该像以前一样工作。毕竟这只是一个警告...错误消息是在您关闭窗口后才出现的,不是吗?