How can I use a plot legend to toggle an element's visibility?

47 views (last 30 days)
Hi,
I am trying to plot multiple items on the same plot, but I would like to implement a quick method to hide or show a single item, e.g. by clicking on it on the plot legend. I have tried with the clickable legend (as described here: https://www.mathworks.com/matlabcentral/fileexchange/21799-clickablelegend-interactive-highlighting-of-data-in-figures), but this functionality seems to be unsupported in more recent MATLAB releases. I have also tried to include a callback function (as in this example: https://blogs.mathworks.com/pick/2016/03/25/interactive-legend-in-r2016a/), again with no results.
Thanks in advance for your help
  7 Comments
Davindra Usov
Davindra Usov on 25 Apr 2023
have you tried switch cases with a tiled layout. Search switch on matlab help
dpb
dpb on 25 Apr 2023
Edited: dpb on 25 Apr 2023
@Davindra Usov -- what's the issue you're raising? I don't follow; I just created a tiled layout and put a legend on each of two axes/tiles and assigned the above callback function to each. Both work as advertised with no need to do anything else...
% from example for tiledlayout...
x = linspace(0,30);
y1 = sin(x/2);
y2 = sin(x/3);
y3 = sin(x/4);
% Plot into first tile twice... (doc does three, but two's plenty to illustrate)
tiledlayout('flow')
nexttile
plot(x,y1)
hLg(1)=legend('Y1'); % add a legend; save the handle...
nexttile
plot(x,y2)
hLg(2)=legend('Y2'); % add a legend; save the handle...
hLg(1).ItemHitFcn = @hitcallback_ex1;
hLg(2).ItemHitFcn = @hitcallback_ex1;
After this, clicking on the legend entry in each toggles visibility of each as expected...
set(hLg,{'ItemHitFcn'},{@hitcallback_ex1})
is a more elegant syntax to set all handles to the one callback function.

Sign in to comment.

Accepted Answer

Aditya Srikar
Aditya Srikar on 28 Apr 2023
Edited: Aditya Srikar on 28 Apr 2023
Hi Alessandro
You can modify legend properties to control the appearance and behaviour of a Legend object. By changing each property, you can modify certain aspects of the legend.
Consider the following example
plot(rand(3))
lgd = legend('a','b','c');
c = lgd.TextColor;
lgd.TextColor = 'red';
In the above example, the text color of legend is set to red.
To toggle visibility of legend on click event, you can use the property ItemHitFcn, which associates a callback function to legend and the callback function executes when you click legend items.
Refer the documentation for more details :
Hope it helps !

More Answers (0)

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!