Effacer les filtres
Effacer les filtres

Changing the same property of some axis children using subsasgn

10 vues (au cours des 30 derniers jours)
Diaa
Diaa le 18 Avr 2021
Commenté : Diaa le 18 Avr 2021
How to make the following code work in order to change the 'Visible' property of some children plots whose handles are stored in toHide using subsasgn?
f1 = figure;
ax1=axes(f1);
axis(ax1,'tight');
ax1.NextPlot = 'add';
plot(ax1,[1,2],[3,4],'DisplayName','graph 1')
plot(ax1,[1,2],1.5*[3,4],'DisplayName','graph 2')
plot(ax1,[1,2],2*[3,4],'DisplayName','three')
toHide = findobj(ax1,'-regexp','DisplayName','graph');
%% Method 1
toHide(:).Visible = {'off','off'};
%% Method 2
S = substruct('()',{':'},'.','Visible');
toHide(:).Visible = subsasgn( toHide , S , {'off','off'} );
  4 commentaires
Jonas
Jonas le 18 Avr 2021
you could use
for nr=1:numel(toHide)
S(1).type='()';
S(1).subs={nr};
S(2).type = '.';
S(2).subs = 'Visible';
toHide = subsasgn( toHide , S , 'off' );
end
if the objects could be indexed directly this would be more easy, but your Method 1 does not work in my matlab
Diaa
Diaa le 18 Avr 2021
Thanks for the help.

Connectez-vous pour commenter.

Réponse acceptée

Matt J
Matt J le 18 Avr 2021
Modifié(e) : Matt J le 18 Avr 2021
I assume you know that subsasgn is called implicitly whenever you make an assignment statement, as in the following:
[toHide.Visible]=deal('off')
  4 commentaires
Diaa
Diaa le 18 Avr 2021
I thought it could be done without the need to use for-loop.
Matt J
Matt J le 18 Avr 2021
No, it cannot be done solely with subsasgn, with no loops.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by