Changing the same property of some axis children using subsasgn

5 visualizaciones (últimos 30 días)
Diaa
Diaa el 18 de Abr. de 2021
Comentada: Diaa el 18 de Abr. de 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 comentarios
Jonas
Jonas el 18 de Abr. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
Matt J el 18 de Abr. de 2021
Editada: Matt J el 18 de Abr. de 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 comentarios
Diaa
Diaa el 18 de Abr. de 2021
I thought it could be done without the need to use for-loop.
Matt J
Matt J el 18 de Abr. de 2021
No, it cannot be done solely with subsasgn, with no loops.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by