matlab绘图(7):Matlab在同一张图中加入多个图例需要注意的一些问题!

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值