Adding a legend from a loop into one element

Hi, I created a loop (p4) and would like to find a way to combine them into one element so that when I click on p4 in the legend this element disappears (visibility off). See below for the code.
for k=1:size(A,1)
p4 = plot3([A(k,1),B(k,1)],[A(k,2),B(k,2)],[A(k,3),B(k,3)],'b');
end
...
L = legend([p1 p2 p3 p4 S p5 p7 p9],{'p1','p2','p3','p4','S','p5','p7','p9'},'location','Best');
L.ItemHitFcn = @hitcallback_ex1;
function hitcallback_ex1(src,evnt)
if strcmp(evnt.Peer.Visible,'on') evnt.Peer.Visible = 'off'; else evnt.Peer.Visible = 'on'; end
end
end
At the moment, nothing happens when I click on p4. Thank you in advance!

3 Kommentare

Jan
Jan am 11 Jan. 2018
I do not understand your description. What does "p4" mean in "a loop (p4)"? What do you want to "combine"? What is "one element". Which element should disappear where - in the axes or in the legend? What is "p1, p2, ..." in the code?
What are the undefined handles p1 p2 p3 S p5 p6 p9 ? Don't you want to use
p(k) = ...
legend(p, ...
Hi Jan, Sorry if my question was not clear. I didn't copy paste my whole code.
My loop is as follow
for k=1:size(A,1)
p4 = plot3([A(k,1),B(k,1)],[A(k,2),B(k,2)],[A(k,3),B(k,3)],'b');
end
end
L = legend([p4],{'p4'},'location','Best');
L.ItemHitFcn = @hitcallback_ex1;
I added a function at the end of my code to allow the user to click on the legend to put it on or off the visibility of the loop.
The function is as followed :
function hitcallback_ex1(src,evnt)
if strcmp(evnt.Peer.Visible,'on')
evnt.Peer.Visible = 'off';
else
evnt.Peer.Visible = 'on';
end
end
end
I want to be able to click on the legend p4, and turn off the visibility of the loop (see attachment). At the moment, nothing happens when I clicked on p4. I hope it is more clear now.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Jan
Jan am 12 Jan. 2018

0 Stimmen

I'm not sure, but maybe this helps:
L = legend(p4, {'p4'},'location','Best');
L.ItemHitFcn = {@hitcallback_ex, p4};
function hitcallback_ex1(src, evnt, LineH)
if strcmp(LineH.Visible, 'on')
LineH.Visible = 'off';
else
LineH.Visible = 'on';
end
end
Do you know FEX: ClickableLegend? It might be useful also.

Tags

Gefragt:

am 11 Jan. 2018

Beantwortet:

Jan
am 12 Jan. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by