Scale a Legend with the underlying Axis

9 次查看(过去 30 天)
Hi,
I'm trying to make a figure, of fixed size, with multiple subplots. The number of subplots, and thus the size of each can vary. Each subplot may have a dedicated legend. The Problem is, that the Legend always has the same size regardless of the size of the subplots. So if the subplots become small the legend is way to big.
I noticed that the legend scales with its FontSize, so I figured, if I set the FontUnits of the Legend to normalized it would to the trick. Though I am able to set the FontUnits property of the legend, its FontSize is still displayed in Pts and it won't scale when changing the subplot size.
So, is there a smart way to have the legend scale with the underlying Axis?
Best regards

回答(1 个)

Ramnarayan Krishnamurthy
The observation that the size of the legend scales with the Font Size is true. Is there a reason you would prefer not to change the Font Size in that case?
As in, assuming you have the handle to the legend of a subplot in 'a':
a.FontSize = 4;
Another approach would be to set the size of the legend as follows:
set(a ,'Position', [0.8 0.2 0.05 0.5])
This will require figuring out the appropriate x and y values for the position vector.
  2 个评论
Simon Kölbl
Simon Kölbl 2017-9-22
编辑:Simon Kölbl 2017-9-22
The thing is I don't want to set the FontSize manually. Consider this example:
figure
plot(randn(100,1));
hold on
plot(randn(100,1));
s1 = annotation('textbox', [0.2 0.2 0.1 0.1],'String', 'TESTEST', 'FitBoxToText', 'on');
l = legend('TEST1', 'TEST2');
The FontUnits of both the Textbox and the legend are points by default. If I change the size of the figure with the mouse, the FontSize does not change, and thus the textbox and legendbox size does not as well.
Now I set the FontUnit properties of the textbox and legend to normalized:
s1.FontUnits = 'normalized';
l.FontUnits = 'normalized';
Now if I resize the figure, the FontSize of the textbox and its size scales accordingly, however, the FontSize of the legend stays the same during the resizing operation and thus doesn't scale.
The fontsize of the textbox, s1.FontSize, is displayed correctly in normalized units, while the fontsize of the legend, l.FontSize, is still displayed in points. The command
l.FontUnits = 'normalized';
does not seem to have any effect. If it would have, the legend would scale properly.
Felix Schönig
Felix Schönig 2021-1-7
I am having the same problem. Did you find a solution?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Legend 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by