Why is plot3 slow when I use it in a loop?
显示 更早的评论
I create plot3 in gui axes, if the number of elements that the many depictions of the process is very slow, if you can provide solutions
for i=1:length(AX(:,1))
plot3(AX(i,:),AZ(i,:),AY(i,:),'-c','LineWidth',0.25);
hold on
plot3(AXD(i,:),AZD(i,:),AYD(i,:),'-g','LineWidth',0.5);
end
回答(2 个)
Andrew Newell
2011-6-8
You could try using line instead of plot3. You'll have to make sure all your options come in pairs, e.g.,
line(AX(i,:),AZ(i,:),AY(i,:),'LineStyle','-','Color','c','LineWidth',0.25);
EDIT: With the data you provided, I tried these commands and it worked fine.
for i=1:size(AX,2)
line(AX(i,:),AZ(i,:),AY(i,:),'LineStyle','-', ...
'Color','c','Marker','.','LineWidth',1)
line(AXD(i,:),AZD(i,:),AYD(i,:),'LineStyle','-', ...
'Color','g','Marker','.','LineWidth',1)
end
On my machine this is 4 times faster than using the code you provided. Note that when you use line the image is saved by default, so you don't need hold on.
11 个评论
pink
2011-6-8
Andrew Newell
2011-6-8
line(AX(i,:),AZ(i,:),AY(i,:),'LineStyle','-','Color','g','Marker','.','LineWidth',1)
pink
2011-6-8
Andrew Newell
2011-6-9
Are you saying that this error only occurs when you use line instead of plot3? Are you changing anything else besides the plot commands?
Walter Roberson
2011-6-9
size(AX)
size(AZ)
size(AY)
size(AXD)
size(AZD)
size(AYD)
pink
2011-6-9
pink
2011-6-9
Andrew Newell
2011-6-9
See my revised answer.
pink
2011-6-9
Andrew Newell
2011-6-9
What do you mean?
pink
2011-6-9
Walter Roberson
2011-6-8
0 个投票
You only need to execute the "hold on" once; after that it is set and becomes a waste of time.
At some point, you are going to exceed the amount of memory that your graphics card has easily available; things will slow down then.
You could experiment with switching renderers.
6 个评论
pink
2011-6-8
Walter Roberson
2011-6-8
set(gcf,'Renderer','zbuffer')
pink
2011-6-8
Walter Roberson
2011-6-9
Yes, that could help:
axh = gca;
plot3(axh, AX(1,:),AZ(1,:),AY(1,:),'-c','LineWidth',0.25);
hold(axh,'on')
plot3(axh,AXD(1,:),AZD(1,:),AYD(1,:),'-g','LineWidth',0.5);
for i = 2:length(AX,2)
plot3(axh,AX(i,:),AZ(i,:),AY(i,:),'-c','LineWidth',0.25);
plot3(axh,AXD(i,:),AZD(i,:),AYD(i,:),'-g','LineWidth',0.5);
end
Walter Roberson
2011-6-9
Should be size(AX,1) instead of length(AX,2)
pink
2011-6-9
类别
在 帮助中心 和 File Exchange 中查找有关 Graphics Performance 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!