【MATLAB绘图脚本】用于期刊的matlab单张图片尺寸、坐标轴等基本设置

脚本用途

用于在绘制完单张函数曲线后对函数图像的尺寸、坐标轴的尺寸、线条的尺寸颜色等进行基本设置。由于每张图用途不同可能需要的功能不同,可以采用类似方法,在matlab说明文档中找到figure和axes的属性进行调用即可。

期刊论文常用绘图尺寸

建议提前看看肖老师的绘图经验。
在这里插入图片描述

使axes铺满figure的方法

实际上我们从matlab输出的图形尺寸是指figure.Position.
这里需要理解figure以及axes的属性Posiiton,OuterPosition,InnerPosition。具体可见matlab官方文档,但是实际上的效果好像与这个还是有一些出入的。

  • fig.Positon:可绘制区域的位置和大小,指定为 [left bottom width height] 形式的向量。此区域不包括图窗边框、标题栏、菜单栏和工具栏。

  • fig.OuterPositon:外部边界的位置和大小,指定为 [left bottom width height] 形式的向量。此属性定义由图窗的外部边界围起的区域(包括边框、标题栏、菜单栏和工具栏)。

  • fig.InnerPositon:可绘制区域的位置和大小,指定为 [left bottom width height] 形式的向量。此区域不包括图窗边框、标题栏、菜单栏和工具栏。所有测量值都采用 Units 属性指定的单位。此属性值等同于 Position 属性值。

  • ax.Position:坐标区的尺寸和位置,包括标签和边距,指定为 [left bottom width height] 形式的四元素向量。此向量定义坐标区外边界围成的矩形范围。left 和 bottom 元素定义矩形的位置,测量方式是从其左下角到父容器的左下角。width 和 height 定义矩形的大小。这两个值按照 Units 属性指定的单位进行测量。默认情况下,单位为像素。

  • ax.OuterPosition:坐标区的尺寸和位置,包括标签和边距,指定为 [left bottom width height] 形式的四元素向量。位置值相对于父容器。默认情况下,值的测量单位为像素。

  • ax.InnerPosition:此属性为只读。内坐标区的大小和位置,不包括标签和边距,返回 [left bottom width height] 形式的四元素向量。left 和 bottom 元素定义矩形的位置,测量方式是从其左下角到父容器的左下角。width 和 height 定义矩形的大小。这两个值按照 Units 属性指定的单位进行测量。默认情况下,单位为像素。

在这里插入图片描述

需要注意的是,在进行图形调整时应该先对label进行调整,这样才能确定下axes.OuterPositon的尺寸,在将其铺满figure使才不会出现label超出边界的问题。
**当ax.Position采用默认的normalized时,才会使图形随着图窗的尺寸变化而进行变化。而normalized的单位是根据其容器(即图窗的尺寸)进行归一化至[0 0 1 1]的,包括ax的其他属性的尺寸单位均是进行了归一化之后的。这样再使图形铺满图窗时有一个缺点:随着图窗尺寸的增大,图形与图窗的间隔也会随着增大。
因此下述的脚本还存在一个问题:多次使用该函数调整同一图形尺寸时,会导致图形超出图窗的边界。改进版本请见:
改进版本代码

文本解释器的选择与区别

matlab默认文本解释器为tex,该解释器也能够对部分数学公式进行解析处理,但是在下标表示方面,tex方法的下标会下沉的比较多,影响美观性,且与期刊内其他字体不一致。比如,tex表达方式为{\itF_n},而latex表达式为 F n F_n Fn。 因此建议写数学表达式时还是采用latex解释器比较好。

图形调整脚本

function adjust_fig(fig, ax, leg, x_label, y_label)
%%
%该函数用于对函数图像的尺寸、坐标轴的尺寸、线条的尺寸颜色等进行基本设置
%%
%图像尺寸与背景设置
fig.Units = 'centimeters';
fig.Position(3:4) = [8,5]; %设置图像尺寸(实际复制到word中的尺寸大小)
fig.Color = [1 1 1]; %设置图像背景

%X标签设置 (只有先确定了标签,才能确定标签尺寸,进而才能调整axes尺寸)
ax.XLabel.String = x_label;
ax.XLabel.Units = 'normalized';
%ax.XLabel.Position(1:2) = [0.5, -0.125];
ax.XLabel.Interpreter = 'latex'; %采用latex解释器能够解决tex解释器下标下沉的问题

%Y标签设置
ax.YLabel.String = y_label;
ax.YLabel.Units = 'normalized';
%ax.YLabel.Position(1:2) = [-0.15, 0.5];
ax.YLabel.Interpreter = 'latex';

%axes铺满figure设置方法
ax.Units = 'normalized';%将其设置为normalized可使其随figure的调整而调整
%ax.OuterPosition(3:4) = [8,5.5]; %设置绘图区域尺寸(包括标签)
outerpos = ax.OuterPosition;
%获取坐标轴文本标签的边距(即标尺文字序列)
ti = ax.TightInset;
left = outerpos(1)+1.1*ti(1) ;%1.1用于预留一点边界范围,否则导出的图片边缘线条会有缺失(该值可根据图形尺寸进行调整),下同。
bottom = outerpos(2)+1.1*ti(2) ;
ax_width = outerpos(3) - 1.25*(ti(1) + ti(3));
ax_height = outerpos(4) - 1.15*(ti(2) + ti(4));
ax.Position = [left bottom ax_width ax_height]; 

ax.LineWidth = 1; %设置坐标轴宽度
ax.FontName = 'Times New Roman';
ax.FontSize = 10;
ax.TickLabelInterpreter = 'latex';
ax.XGrid = 'on'
ax.YGrid = 'on'

ax.XMinorTick = 'on'; %次刻度线
ax.YMinorTick = 'on';
ax.TickLength(1) = 0.02;

leg.Interpreter = 'latex';
leg.Location = 'best';
leg.Box = 'on';
end

脚本使用效果

fig = figure;
ax = axes(fig);
plot(-forcedata(:,2),'r','LineWidth',0.7) %切向力
hold on
plot( forcedata(:,3),'g','LineWidth',0.7) %轴向力
plot( forcedata(:,4),'b','LineWidth',0.7) %法向力
leg = legend('$F_t$','$F_a$','$F_n$');
%set(leg,'Location','NorthEast','FontName','Times New Roman','FontSize',10)
box on
xlim([xlim1 xlim2])
adjust_fig(fig, ax, leg, 'Samples', '$F$/N')

在这里插入图片描述

图形后处理常用方法

图形绘制完成后,一般直接复制到word中即可,或者另存为svg在粘贴如word中也行。如果要进行后续处理,可以将其直接复制到visio或者AI软件中,在进行处理。
需要注意的是,将matlab图形复制到visio中,可以点击取消组合,进而对图形的每一项进行重新调整。

主要参考资料

华中科技大学肖泽文:科技论文作图规范
MATLAB: 绘制出版级论文插图的经验
[Matlab] 如何将axes填充整个Figure
Matlab、Visio导出精美论文插图——位置与尺寸设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值