matlab中在一张图中加入多图例方法参考:
https://blog.csdn.net/weixin_44231148/article/details/126619418?spm=1001.2014.3001.5506
该方法的确可以实现,但需要注意以下问题:
1.第1次图例设置后,最好在出图保存前,设置隐藏的新坐标轴,不然需要进行坐标轴转换,否则后续设置的其他参数会作用在隐藏的坐标轴上,导致所有新设置无效。
2.为保证图例间的独立性,请注意关闭图例自动更新。
- 这是我设置图例1的代码:
legend1=legend(legend_entries, ...
'FontName', 'Times New Roman', 'FontSize', 6,...
'Location', 'NorthEastoutside',...
'Box', 'on', 'NumColumns', 1 );
set(legend1, 'Position', [0.84, 0.41, 0.1, 0.2]);
legend1.ItemTokenSize = [10, 10];
legend('AutoUpdate', 'off');%注意这里一定要设置,不然后续绘图图例会自动更新
- 这是我设置图例2的代码:
if nargin > 1 && ~isempty(set_legend2)
new_ax = axes('Position', get(gca, 'Position'),...
'Units', get(gca, 'Units'), 'Visible', 'off');
legend2=legend(new_ax,set_legend2,plot_info.leg,...
'FontName', 'Times New Roman', 'FontSize', 6, ...
'Location', 'northwest', ...
'Box', 'off', 'NumColumns', 2 );
set(legend2, 'Position', [0.55, 0.75, 0.1, 0.1]);
% 调整图例大小和位置
legend2.ItemTokenSize = [10, 10];
end
二.以下是stackover flow @Wolfie帮助解决的2个问题:
链接:https://stackoverflow.com/a/78928295/27080112
从提供的图中可以看到存在以下两个问题:
1.图例字体大小不一致:虽然图例1和图例2的字体都设置为6号,但显示出来的大小不同,只能通过测试,把字号调为不一样的,才能让两者字体看起来一样。
@Wolfie的解决方法:
原因:图例字体大小看起来不一致是由于大小写字母本身的比例造成的,实际上通过量测字体高度,图例字体大小是一致的。
2.图例中的小图标过大:调整 legend2.ItemTokenSize 对图例的小图标效果不明显,需要调大文字,才能拉开小图标的间距,但小图标本身的大小变化不大。
**本人解决方法:**通过调大图例字体,可以拉开标记的间距,达到一个稍微合理的视觉效果,但标记本身大小的调整,通过精细调整legend2.ItemTokenSize 有一定作用,但效果依然不大;
@Wolfie的解决方法:
方法一:我测试了图标会变细,但并不会变小
% Create a plot
figure(1); clf; hold on;
plot( 1:N, cos((1:N)*2/N), '-x' );
plot( 1:N, rand(1,N), '-o' );
plot( 1:N, sin((1:N)*2/N), '-d' );
% Create the legend, use the 2nd output to get the graphics objects
[leg,obj] = legend( {'cos','rand','sin'} );
% Find the line objects and change their marker properties
lines = findobj(obj,'type','line');
set(lines,'Markersize',15);
方法二:我测试后报错了,由于我自己的方法已经能达到想要的效果,故未继续深究。
% Create the legend
leg = legend( {'cos','rand','sin'} );
% Find the line objects and change their marker properties
lines = cellfun( @(x)findobj(gcf,'displayname',x), leg.String );
set(lines,'Markersize',15);