matlab添加多个legend

本文介绍如何在Matlab中避免图例遮挡曲线的方法,通过将图例拆分为多个并调整位置来改善图表的可读性。适用于学术出版及报告中图表的美化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Matlab提供的legend函数,给出的legend经常覆盖了某些曲线(尤其是用IEEE模板的时候,一般图片宽度不超过315px).
  1. a=linspace(0,2*pi,100);
  2. y1=100*sin(a);
  3. y2=50*cos(a);
  4. y3=tan(a);
  5. y4=log(a);
  6. y=[y1;y2;y3;y4];
  7. figure
  8. p=plot(a,y)
  9. legend('sin','cos','tan','log')
复制代码
如下图所示:

Matlab画图实现两个或多个legend,不同排版
2010-10-4 22:46 上传
下载附件(18.42 KB)
Matlab画图实现两个或多个legend,不同排版


这显然不是你想要的,你的reviewers也会肯定让你修改的!

原因是Matlab的Legend函数,只能水平或者竖直排版!

解决方法:把legend分成几个,相对独立,这样可以使用鼠标随意移动,确保不遮挡曲线。

结果如下图所示:

Matlab画图实现两个或多个legend,不同排版
2010-10-4 22:46 上传
下载附件(18.15 KB)
Matlab画图实现两个或多个legend,不同排版


程序演示:
  1. a=linspace(0,2*pi,100);
  2. y1=100*sin(a);
  3. y2=50*cos(a);
  4. y3=tan(a);
  5. y4=log(a);
  6. y=[y1;y2;y3;y4];
  7. figure
  8. p=plot(a,y)

  9. legend(p(1:2),'sin','cos');
  10. ah=axes('position',get(gca,'position'),...
  11.             'visible','off');
  12. legend(ah,p(3:4),'tan','log','location','west');

复制代码

 

 

### Matlab 中处理多个图例重叠的解决方案 在 Matplotlib 和 MATLAB 的绘图环境中,当图表中有多个数据系列时,可能会遇到图例 (legend) 之间的相互覆盖问题。以下是针对该问题的具体解决方法: #### 方法一:调整图例位置 通过设置 `Position` 属性来手动调整每个图例的位置,从而避免它们互相覆盖MATLAB 提供了灵活的方式来控制图例的位置。 ```matlab % 创建示例图形 figure; plot(1:10, 'DisplayName', 'Series 1'); hold on; plot(2:11, 'DisplayName', 'Series 2'); % 添加第一个图例并定位 hLegend1 = legend('show'); set(hLegend1, 'Position', [0.1, 0.7, 0.1, 0.1]); % 设置左上角坐标和大小[^1] % 隐藏默认图例以便添加第二个独立图例 delete(hLegend1); % 手动创建另一个图例 hLegend2 = annotation('textbox',... [0.8, 0.8, 0.1, 0.1],... % 定义右上角新图例位置 'String',{'Series 3'},... 'FitBoxToText','off',... 'EdgeColor',[0.5, 0.5, 0.5]); ``` 这种方法允许用户精确指定每个图例的位置,防止其与其他元素发生冲突。 --- #### 方法二:分组显示图例 如果不想让所有图例都挤在一个地方,则可以考虑将不同部分的数据分成若干子集,并分别标注对应的图例。 ```matlab % 绘制两条曲线作为一组 figure; ax1 = subplot(1, 2, 1); plot(ax1, rand(10, 1), 'b-', 'LineWidth', 2); hold on; plot(ax1, rand(10, 1)+1, 'r--', 'LineWidth', 2); lgdAx1 = legend({'Line A', 'Line B'}); % 另外绘制另外两线形成另一组 ax2 = subplot(1, 2, 2); plot(ax2, sin(linspace(-pi, pi)), 'g-.'); hold all; stem(ax2, cos(linspace(-pi/2, pi/2))); lgdAx2 = legend({'Sine Waveform', 'Cosine Samples'}); ``` 此方式利用子图功能把复杂的信息拆解开来呈现给读者更容易理解的形式[^1]。 --- #### 方法三:透明度调节 对于某些情况下无法完全分开各个标签的情况,可以通过降低背景颜色不透明度使得下面的内容隐约可见而不会被遮挡得太厉害。 ```matlab fig = figure(); axesHandle = axes(fig); lineHandles = arrayfun(@(i) plot(randn(1e3,1)*sqrt(i),'Parent',axesHandle,'DisplayName',['Data Set ',num2str(i)]), ... 1:4,... 'UniformOutput',false); legObj = legend([lineHandles{:}],'Location','BestOutsideRight'); set(legObj,'Interpreter','none') colormap(gray) alpha(legs,.6)%减少填充区域的Alpha值至约六成亮度 drawnow limitrate; %强制刷新屏幕以应用更改效果立即显现出来 ``` 这里展示了如何改变 alpha 值影响视觉感受的同时保持原有布局不变[^1]. --- ### 总结 以上三种策略——即重新安排图例座标、分割展示以及适当运用半透明白底技术均能有效缓解因过多项目造成的拥挤状况。具体采用哪一种取决于实际需求和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值