Indexing animated lines from array

2 views (last 30 days)
Koen
Koen on 19 Nov 2020
Commented: Koen on 19 Nov 2020
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?

Accepted Answer

Ameer Hamza
Ameer Hamza on 19 Nov 2020
Edited: Ameer Hamza on 19 Nov 2020
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

More Answers (0)

Categories

Find more on Animation in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!