【MATLAB学习笔记】绘图——在原有的绘图区上添加新坐标区(axes)并进行绘图

前言

  在原有的绘图区上直接添加新的坐标区再次进行绘图。原有绘图区详见下面这篇文章:
【MATLAB学习笔记】绘图——errorbar误差图+patch误差填充图

axes函数的使用

原有绘图区

  先给出原有绘图区如下:
在这里插入图片描述

设置新坐标区的位置和大小

  MATLAB中的axes函数可以直接在原有绘图区直接创建新的坐标系,这里的位置和大小[0.2,0.5,0.4,0.2]是通过自己尝试慢慢调整的:

ax2 = axes('Position',[0.2,0.5,0.4,0.2]);  % 设置坐标区

关于Position的说明:

  • 'Position’表示坐标区的大小和位置,不包括标签边距,指定为 [left bottom width height] 形式的四元素向量。默认情况下,MATLAB 按照归一化的容器单位来测量值。要更改单位,请设置 Units 属性。
  • left 和 bottom 元素定义从容器(通常为图窗、面板或选项卡)左下角到位置边界左下角之间的距离。
  • width 和 height 元素是位置边界维度。对于三维视图中的坐标区,Position 属性是包围坐标区的最小矩形。

  然后就可以看到图中多了一个坐标区:在这里插入图片描述

在新坐标区进行绘图

  这里绘制了一个堆叠条形图:

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(1);   % 设置填充颜色
b(1).EdgeColor = myColors(1);   % 设置边框颜色
b(1).FaceAlpha = 0.8;   % 设置填充颜色透明度
b(2).FaceColor = myColors(2);
b(2).EdgeColor = myColors(2);
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)

在这里插入图片描述

保存图片

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

exportgraphics(f,'Infww_errorfig_axes.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',18);
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

%% 新绘图区
ax2 = axes('Position',[0.2,0.5,0.4,0.2]);  % 设置坐标区
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(1);   % 设置填充颜色
b(1).EdgeColor = myColors(1);   % 设置边框颜色
b(1).FaceAlpha = 0.8;   % 设置填充颜色透明度
b(2).FaceColor = myColors(2);
b(2).EdgeColor = myColors(2);
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)


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

总结

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

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB是一种强大的数值计算和科学计算软件,其中的GUI(Graphical User Interface,图形用户界面)功能可以帮助用户通过可视化方式更直观地展示计算结果。 在MATLAB GUI中,可以使用Axes(轴)控件域来绘制图形。Axes是用于显示二维或三维图形的矩形域,在GUI中可以通过在窗口中添加Axes控件来创建图形显示域。 要在MATLAB GUI中的Axes绘图,首先需要创建一个GUI窗口,可以使用MATLAB自带的GUIDE工具或者通过在命令命令窗口中输入"guide"来打开。然后在窗口上添加一个Axes控件,可以通过拖拽Axes控件的图标到GUI设计器中的合适位置来添加添加Axes控件后,就可以在MATLAB中编写代码来绘制图形了。首先,需要获取Axes控件的句柄,可以使用命令"handles.axes1"来获取,其中"axes1"为Axes控件的名称。然后,可以使用MATLAB绘图函数,如plot、scatter等,在Axes域中绘制所需的图形。 例如,可以使用以下代码在Axes域绘制一个简单的折线图: ```matlab x = 1:10; % x轴数据 y = x.^2; % y轴数据 plot(handles.axes1, x, y); % 在Axes域中绘制折线图 ``` 绘制完成后,可以根据需要对图形进行进一步的设置和装饰,如添加标题、坐标轴标签、图例等。 绘制图形至MATLAB GUI的Axes域能够使计算结果更加直观地展示给用户,同时也可以方便用户对图形进行交互操作,如平移、缩放、查看数据点等。这对于数据分析、模拟仿真等领域的工程师和科研人员来说非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Infww

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

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

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

打赏作者

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

抵扣说明:

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

余额充值