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!