【MATLAB学习笔记】绘图——errorbar误差图+patch误差填充图
目录
前言
关于MATLAB中errorbar函数和patch函数的使用以及美化加工。如有些细节的地方不清楚的可以点击此先去看看这篇文章:
【MATLAB学习笔记】绘图——去除上、右边框刻度
颜色配置
这里分享一下本人常用的颜色配置:
对应的颜色代码如下
myColors = ["#9489fa"; "#f06464"; "#f7af59"; "#f0da49"; "#71c16f"; "#2aaaef";
"#5690dd"; "#bd88f5"; "#009db2"; "#024b51"; "#0780cf"; "#765005"];
数据准备
随机生成一些数据,这里有y和z两组数据,同时计算误差err。
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;
errorbar函数绘制误差线
errorbar第一个参数为x,第二个参数为y,第三个参数为误差。
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;
patch函数绘制误差填充图
patch函数可以绘制多边形的填充图,第一个参数为x坐标,第二个参数为y坐标,第三个参数为颜色(这里我先设置为红色r,再调整为自己的配色);其中fliplr(x)函数表示将x倒序输出。
下面的代码表示将误差边界围成一圈进行填充颜色:
pa = patch([x,fliplr(x)],[y-abs(err),fliplr(y+abs(err))],'r');
在此基础上,再做细节的调整:
% 绘制误差带
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)
标签、图例
这里用到了latex语法,具体的latex语法自行搜索。
还有一个简便的方法就是先在公式编辑器(Axmath、mathtype)输入,再转化为latex语法复制进MATLAB中就可以了。
注意:MATLAB采用latex语法的时候,需要将Interpreter设置为latex格式。
% 设置轴标签
xlabel('$$\mathrm{Strain} \enspace \varepsilon /\mathrm{MPa}\cdot \mathrm{MPa}^{-1}$$','Interpreter','latex')
ylabel('$$\mathrm{Stress} \enspace \sigma /\mathrm{MPa}$$','Interpreter','latex')
% 设置图例
legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',15)
legend('boxoff') % 取消图例边框
取消上、右边框刻度线
% 去除上、右边框的刻度线
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
保存图片
这里的exportgraphics是剪裁白边保存图像的函数。
% 保存图片
exportgraphics(f,'Infww_errorfig.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')
% 设置图例
legend('$$y=e^{1.1x}$$','$$y=e^{1.3x}+100$$','Interpreter','latex','Location','northwest','Fontsize',15)
legend('boxoff') % 取消图例边框
% 去除上、右边框的刻度线
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
% 保存图片
exportgraphics(f,'Infww_errorfig.png', 'Resolution',600)
总结
这只是一个基础的示例,实际中还会有更具体的、更细致的要求,这就需要再做额外调整;另外本人也仍在学习中,这只是个人的学习笔记,可能还有一些不足之处,欢迎指正。