【MATLAB学习笔记】绘图——多个图例采用一个标签

前言

  MATLAB在添加图例时,图例与标签只能一对一表示,下面提供了一种方法使得图例与标签多对一表示,下文的修改是基于下面这篇文章的图进行修改的。
【MATLAB学习笔记】绘图——在原有的绘图区上添加新坐标区(axes)并进行绘图

图例修改

原有绘图

  这是原来的绘图:
在这里插入图片描述

添加图例

  先直接在子坐标区添加图例:
  注意:下面的这段代码放在子坐标区绘图代码的后面。

legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',9);
legend('boxoff')

  如果直接在子坐标区添加图例的话会得到下面这种效果:

在这里插入图片描述

  但是我们有时希望得到下面这种:

在这里插入图片描述

修改图例位置

下面提供一种思路进行修改:

  1. 将子坐标区的图例设置成与原坐标区图例一样的大小并且标签设置为“ ”(空字符);
  2. 将原坐标区的图例向右移动一些位置;
  3. 将子坐标区的图例移动到原坐标区的图例的左边。

下面根据这个思路进行一步一步修改:

  1. 将子坐标区的图例设置成与原坐标区图例一样的大小并且标签设置为“ ”(空字符);
    注意:下面的这段代码放在坐标区绘图代码的后面。
le2 = legend(' ',' ','Location','northwest','Fontsize',18);
le2.Box = 'off';    % 取消图例边框

在这里插入图片描述

  1. 将原坐标区的图例向右移动一些位置;
    注意:下面的这段代码放在坐标区绘图代码的后面。
le = legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',18);
le.Box = 'off';
Po = le.Position;
le.Position = Po + [0.085,0,0,0];

在这里插入图片描述

  1. 将子坐标区的图例移动到原坐标区的图例的左边。
le2.Position = Po + [-0.1,0,0,0];

注意:上面的这段代码放到第一步代码的后面,即为下面这段代码。

le2 = legend(' ',' ','Location','northwest','Fontsize',18);
le2.Box = 'off';    % 取消图例边框
le2.Position = Po + [-0.1,0,0,0];

在这里插入图片描述

修改子坐标区图例颜色

  对子坐标区柱状图的颜色进行修改,上面的图例的格式依然可以保持,这里的myColors是自己配的颜色,详情可以点击这里

b(1).FaceColor = myColors(3);
b(1).EdgeColor = myColors(3);
b(2).FaceColor = myColors(4);
b(2).EdgeColor = myColors(4);

在这里插入图片描述

保存图片

  采用exportgraphics函数进行剪裁白边保存图像:

exportgraphics(f,'Infww_errorfig_axes_legend.png', 'Resolution',600)

在这里插入图片描述

总代码

clc;clear;close all
set(0,"defaultfigurecolor","w");
%% 
% 配色表
myColors = ["#9489fa"; "#f06464"; "#f7af59"; "#f0da49"; "#71c16f"; "#2aaaef";
            "#5690dd"; "#bd88f5"; "#009db2"; "#024b51"; "#0780cf"; "#765005"];
%% 数据

x = 3:0.08:5;

y = exp(1.1*x);
y1 = y.*(1+0.1.*x);
err = y1 - y;

z = exp(1.3*x)+100;
z1 = z.*(1+0.03.*x);
err1 = z1 - z;

%% 
f = figure("Name","误差");
e = errorbar(x,y,err);
e.Color = myColors(1);  % 颜色
e.LineWidth = 1.5;  % 线宽
e.CapSize = 10; % 误差帽宽度

hold on 
e2 = errorbar(x,z,err1);
e2.Color = myColors(2);
e2.LineWidth = 1.5;
e2.CapSize = 10;

%绘制误差带
pa = patch([x,fliplr(x)],[y-abs(err),fliplr(y+abs(err))],'r');
pa.FaceColor = myColors(1); % 设置颜色
pa.FaceAlpha = 0.2;  % 设置颜色透明度
pa.LineStyle = 'none';  % 设置误差带边界线为无

pa1 = patch([x,fliplr(x)],[z-abs(err1),fliplr(z+abs(err1))],'r');
pa1.FaceColor = myColors(2);
pa1.FaceAlpha = 0.2;
pa1.LineStyle = 'none';

% 设置次刻度线
set(gca,'XMinorTick',true)
set(gca,'YMinorTick',true)

% 设置坐标轴宽度
set(gca,'linewidth',1)

% 设置刻度线长度
set(gca,'ticklength',[0.015,0.25])

% 设置全局字体
set(gca,'FontName','Times New Roman','FontSize',13)

% 设置坐标轴刻度
set(gca,'xlim',[min(x)*0.98,max(x)*1.02])
set(gca,'ylim',[0,1000])
set(gca,'ytick',0:200:1000)
set(gca,'yticklabel',0:200:1000)

% 设置轴标签
xlabel('$$\mathrm{Strain} \enspace  \varepsilon /\mathrm{MPa}\cdot \mathrm{MPa}^{-1}$$','Interpreter','latex')
ylabel('$$\mathrm{Stress} \enspace  \sigma /\mathrm{MPa}$$','Interpreter','latex')

le = legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',18);
le.Box = 'off';
Po = le.Position;
le.Position = Po + [0.085,0,0,0];

% 去除上、右边框的刻度线
box off     % 取消边框
ax1 = axes('Position',get(gca,'Position'),'XAxisLocation','top',...
    'YAxisLocation','right','Color','none','XColor','k','YColor','k');  % 设置坐标区
set(ax1,'linewidth',0.9)
set(ax1,'XTick', [],'YTick', []);   % 去掉xy轴刻度
hold off

%% 
ax2 = axes('Position',[0.2,0.5,0.4,0.2]);  % 设置坐标区
hold off
b = bar(ax2,x(1:2:end),[y(1:2:end);z(1:2:end)]','stacked');
b(1).BarWidth = 0.7;    % 设置柱状图宽度
b(1).FaceColor = myColors(3);   % 设置填充颜色
b(1).EdgeColor = myColors(3);   % 设置边框颜色
b(1).FaceAlpha = 0.8;   % 设置填充颜色透明度
b(2).FaceColor = myColors(4);
b(2).EdgeColor = myColors(4);
b(2).FaceAlpha = 0.8;
box off
set(ax2,'FontName','Times New Roman','FontSize',10)
% 设置次刻度线
set(ax2,'XMinorTick',true)
set(ax2,'YMinorTick',true)
% 设置坐标轴宽度
set(ax2,'linewidth',1)

% 设置图例
% legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',9);
% legend('boxoff')
le2 = legend(' ',' ','Location','northwest','Fontsize',18);
le2.Box = 'off';    % 取消图例边框
le2.Position = Po + [-0.1,0,0,0];


%% 保存图片
exportgraphics(f,'Infww_errorfig_axes_legend.png', 'Resolution',600)

总结

  这只是一个基础的示例,实际中还会有更具体的、更细致的要求,这就需要再做额外调整;另外本人也仍在学习中,这只是个人的学习笔记,可能还有一些不足之处,欢迎指正。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Infww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值