Changing the same property of some axis children using subsasgn

조회 수: 4 (최근 30일)
Diaa
Diaa 2021년 4월 18일
댓글: Diaa 2021년 4월 18일
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
Jonas
Jonas 2021년 4월 18일
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 2021년 4월 18일
Thanks for the help.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2021년 4월 18일
편집: Matt J 2021년 4월 18일
I assume you know that subsasgn is called implicitly whenever you make an assignment statement, as in the following:
[toHide.Visible]=deal('off')
  댓글 수: 4
Diaa
Diaa 2021년 4월 18일
I thought it could be done without the need to use for-loop.
Matt J
Matt J 2021년 4월 18일
No, it cannot be done solely with subsasgn, with no loops.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Operators and Elementary Operations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by