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 comentarios

Jan
Jan el 11 de En. de 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.

Iniciar sesión para comentar.

Respuestas (1)

Jan
Jan el 12 de En. de 2018
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.

Etiquetas

Preguntada:

el 11 de En. de 2018

Respondida:

Jan
el 12 de En. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by