Updating plot in loop takes increasing amount of time

10 ビュー (過去 30 日間)
dleal
dleal 2022 年 5 月 5 日
コメント済み: dleal 2022 年 5 月 6 日
When I update a plot within a loop, each iteration takes longer after a while. Is there a way to avoid the slowdown? See example below:
f = figure;
a = axes(f);
hold(a,"on")
% note: y is supposed to represent real-time data that I receive with some
% frequency. The full vector Y is not available right before plotting
y = randn(1,100000);
for jj = 1:numel(y)
tt = tic;
plot(a,jj,y(jj),'pg');
drawnow;
pause(0.02)
toc(tt)
end
I understand the x and y arguments of the plot are getting larger. Is that the cause? After 6,000 iterations, it already takes three times as long as when the loop it started. Thank you
  2 件のコメント
Matt J
Matt J 2022 年 5 月 5 日
編集済み: Matt J 2022 年 5 月 5 日
I assume there's a reason that you don't simply do this in a single plot command?
f = figure;
a = axes(f);
plot(a,y,'pg')
dleal
dleal 2022 年 5 月 5 日
Hi Matt,
yes, I should have clarified. "y" is supposed to represent real time data that I poll with some frequency. So the full array is not available before plotting

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2022 年 5 月 6 日
Use animatedline()
  1 件のコメント
dleal
dleal 2022 年 5 月 6 日
Hi Walter, thanks! this is perfect. After 100,000 iterations, updating the animated line takes about the same for the first few updates as for the last ones. This works just great.

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2022 年 5 月 5 日
編集済み: Matt J 2022 年 5 月 5 日
I understand the x and y arguments of the plot are getting larger. Is that the cause?
The arguments aren't getting larger, but the number of objects in the plot is getting larger and larger. You can reduce the overall time, though, if the graph doesn't need to be redrawn as frequently.
Maybe update in sub-chunks of y:
f = figure;
a = axes(f);
hold(a,"on")
y = randn(1,100000);
for jj = reshape( 1:numel(y),1000,[]) %<--- loop over sub-chunks of length 1000
tt = tic;
plot(a,jj,y(jj),'pg');
drawnow;
pause(0.02)
toc(tt)
end
  1 件のコメント
dleal
dleal 2022 年 5 月 6 日
thank you Matt! I did some additional tests and verified that drawnow takes a very very long time

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGraphics Performance についてさらに検索

タグ

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by