MATLAB Answers

Setting different properties for some line objects stored in the same handle

4 views (last 30 days)
KAE
KAE on 6 Jan 2020
Commented: KAE on 6 Jan 2020
Let's say I have a handle h1 that contains several line objects, like so:
h1 = plot(1:10, rand(10, 25)); % h1 contains 10 line objects
I want to change the properties of some but not all of the lines, such as making the 3rd and 5th lines wider. How do I do this? Here is what I have tried,
h1([3 5]).LineWidth = 2; % Try to change two of the lines at once
% Expected one output from a curly brace or dot indexing expression, but there were 2 results.
h1({[3 5]}).LineWidth = 2; % Try to change two of the lines at once
% Unable to use a value of type cell as an index.
h1{3}.LineWidth = 2; % Try to change just one line
% Unable to perform assignment because brace indexing is not supported for variables of this type.
What do I need to do differently?

  0 Comments

Sign in to comment.

More Answers (1)

Tom Holz
Tom Holz on 6 Jan 2020
Edited: Tom Holz on 6 Jan 2020
You can do this with the old-style set() functions, like this:
set(h1([3 5]), 'LineWidth', 2);
Or you can use deal(), like this:
[ h1([3 5]).LineWidth ] = deal(2);
I don't believe there are functional difference between the two.

  3 Comments

Tom Holz
Tom Holz on 6 Jan 2020
Thanks. I tend to avoid deal() in practice because I think the code is slightly more confusing to look at. And I also like how the property name is colored differently when using set() because it's quoted text. That makes it easy to scan code and see property names in a different color.
KAE
KAE on 6 Jan 2020
Yes, I think I will remember the 'set' syntax better than deal myself. Still, cool to see.

Sign in to comment.

Sign in to answer this question.

Tags


Translated by