How can I use a plot legend to toggle an element's visibility?
조회 수: 55 (최근 30일)
이전 댓글 표시
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
Davindra Usov
2023년 4월 25일
have you tried switch cases with a tiled layout. Search switch on matlab help
dpb
2023년 4월 25일
편집: dpb
2023년 4월 25일
@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.
채택된 답변
Aditya Srikar
2023년 4월 28일
편집: Aditya Srikar
2023년 4월 28일
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 !
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Legend에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!