Indexing animated lines from array

I would like to store multiple animatedline in one variable.
num_plots = 2;
for i = 1:num_plots
h(i) = animatedline;
end
makes this possible. However
h(1:num_plots) = animatedline;
does not work (points are concatenated, see code below).
for i = 1:100
for ih = 1:num_plots
x = i;
y = i*ih;
addpoints(g(ih),x,y)
end
end
Is there a way to avoid using a for loop?

 採用された回答

Ameer Hamza
Ameer Hamza 2020 年 11 月 19 日
編集済み: Ameer Hamza 2020 年 11 月 19 日

0 投票

When you initialize an array of MATLAB graphics objects like this
num_plots = 2;
g(1:num_plots) = animatedline;
MATLAB creates a single instance of animatedline and assigns it to all elements. Since animatedline is a handle class, all elements of 'g' point to the same object
>> g(1)==g(2)
ans =
logical
1
The workaround is to use a for-loop to initialize so that each element is created independently. For a slightly easier syntax, you can use arrayfun()
num_plots = 2;
g = arrayfun(@(x) animatedline(), 1:num_plots);
for i = 1:100
for ih = 1:num_plots
x = i;
y = i*ih;
addpoints(g(ih),x,y)
end
end

1 件のコメント

Koen
Koen 2020 年 11 月 19 日
Thank you very much for the explanation!

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeProgramming についてさらに検索

製品

リリース

R2020b

質問済み:

2020 年 11 月 19 日

コメント済み:

2020 年 11 月 19 日

Community Treasure Hunt

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

Start Hunting!

Translated by