本文主要介绍了关于制图软件中尺寸和位置设置的问题,以Visio和Matlab为例,详细阐述了基于插图制作和基于海报制作的位置与尺寸设置方法。同时,文章还讨论了如何在不同格式的文件中正确设置图像尺寸和位置,以避免反复调节带来的时间浪费和精神折磨。
在制图过程中,尺寸和位置的设置是影响排版效果的关键因素。正确设置尺寸和位置可以提高工作效率,避免反复调节带来的时间浪费和精神折磨。
Visio中可以通过设置页面尺寸和另存为图片的方式来控制插图的位置和尺寸;Matlab中则通过'Position'和'OuterPosition'两个参数来控制图窗和坐标区的尺寸。
在实际应用中,需要根据文件格式和打印需求来设置图像的位置和尺寸。对于PDF等分页格式文件,可以使用'PaperSize'和'PaperPosition'等参数来控制图像在页面上的位置和大小。
点击上方“阿昆的科研日常”,关注我的公众号。
添加微信:akunscience28 备注:配色
免费领取自制《Matlab科研配色包》
在写第一篇论文的时候,由于对制图工具的认识有限,那时的我常因难以掌控出图质量、需要反复调节试错以达到预期效果而备受煎熬。
多年以后的今天,虽然技巧上提高了成熟了些,但每当遇到新问题,还是需要到处搜索答案、求助他人。
究其原因,大概是没能理解其背后的原理,所以也就无法举一反三。
求之于道,术尚可得;求之于术,止于术。
因此,有必要摸清常用几个成图软件的制图原理。
本次要说的尺寸设置就是其中一个说大不大,说小不小的问题——尺寸太大或者太小的图片,在插入到文档并调整到适中后,效果总会打些折扣。而在图的尺寸确定后,还需要考虑其位置,两者共同影响着排版效果。
总的来说,根据图的不同应用场景,可以将其尺寸与位置分为:
1)显示尺寸与显示位置
通常,屏幕与图的坐标原点为左下角。
特别地,图中坐标区与图的关系类似于图片与纸张/电子文档页面的关系,不管怎么缩放,两者尺寸与位置关系不变。
![]()
2)打印尺寸与打印位置
对于论文写作,由于纸张的大小是确定的(如A4),所以插图的尺寸与位置是限制在一定范围的;当打印尺寸确定的图片插入到电子文档的页面上时,虽然可以自由缩放电子文档页面,改变图片显示尺寸的大小,由于电子文档的页面尺寸是确定的,图片与电子文档页面之间的位置与尺寸关系是不变的。
因此,为了避免反复调节图片尺寸与位置带来的时间浪费与精神折磨,应该根据期刊对纸张尺寸、文字是否分栏等要求,提前确定图片的打印尺寸,且尽量使制图时的显示尺寸与打印尺寸成正比。
另外,根据需求的不同,可将位置与尺寸的设置问题分为基于插图制作的位置与尺寸设置与基于海报制作(直接打印)的位置与尺寸设置两类。
为了便于理解两者的关系,简单地说,插图是页面上的一张图片,除了这张插图,页面上还有其它内容;海报则是整个页面上的内容,插图放大填充整个页面相当于海报。
下面以Visio和Matlab为代表的两类制图软件为例说明其中的位置与尺寸设置问题。
1.1. 基于插图制作的位置与尺寸设置
在作图前,将页面尺寸设置为所需大小:‘设计’->‘大小’->‘其它页面大小’,在‘页面尺寸’选项中选择‘自定义大小’。
![]()
然后直接在修改过的页面上作图即可。
![]()
完成后,单击‘文件’->‘另存为’,选择文件保存位置、文件格式,修改文件名后,在弹出的输出选项窗口中修改‘分辨率’,‘大小’选择‘源’,保存成没有白边(图片尺寸小于等于页面尺寸)的图片。
当然,如果就想要白边,一种方法是加一个矩形图形,用矩形包围住对象,并将矩形填充颜色设置为白色(为了便于辨识,下图将填充颜色设置为绿色)且无线条。
![]()
1.2. 基于海报制作的位置与尺寸设置
直接将页面大小设置为海报尺寸,如A4尺寸为297×210毫米。
作图完成后,可以直接打印。
2.1. 基于插图制作的位置与尺寸设置
在Matlab中,‘Position’与‘OuterPosition’两个参数可以控制图窗(Figure)尺寸与坐标区(Axes)尺寸。
四者关系如图:
![]()
1)Figure
对于Figure的‘Position’与‘OuterPosition’,两者区别在于是否包含图窗边框、标题栏、菜单栏和工具栏。
Position
Location and size of the drawable area,specified as a vector of the form [left bottom width height]. This areaexcludes the figure borders, title bar, menu bar, and tool bars.
OuterPostion
Location and size of the outer bounds,specified as a vector of the form [left bottom width height]. This propertydefines the region enclosed by the figure’s outer bounds (which includes theborders, title bar, menu bar, and tool bars).
2)Axes
对于Axes的‘Position’与‘OuterPosition’,两者区别在于是否包含标签和边距。
Position
Size and location, excluding a margin for thelabels, specified as a four-element vector of the form [left bottom widthheight].
OuterPostion
Size and location, including the labels anda margin, specified as a four-element vector of the form [left bottom widthheight]. The default value of [0 0 1 1] includes the whole interior of thecontainer.
![]()
上图是Matlab帮助文档里的说明图。OuterPosition 值(蓝色)、Position 值(红色)以及由 TightInset 值(品红色)。
---------------------
简单做了一个实验验证了一下四者关系。
![]()
首先设置图片尺寸:
1.确定Figure的‘Position’与‘OuterPosition’范围
a) 令Figure1图窗的Position为[0 0 15(cm) 10(cm)]。
hFig1 = figure('Name','Fig1.Position:[0 015cm 10cm]','Menubar','none');
plot([0 1 nan 0 1], [0 1 nan 1 0]), axistight
set(gca, 'XTickLabel',[], 'YTickLabel',[],...
'Units','normalized', 'Position',[0 0 1 1])
set(hFig1, 'Units','centimeters','Position',[0 0 x y])
b) 令Figure2图窗的OuterPosition为[0 0 15(cm) 10(cm)], 且Figure2坐标区的OuterPosition= Figure2图窗的Position。
hFig2 =figure('Name','Fig2.OuterPosition:[0 0 15cm 10cm]','Menubar','none');
plot([0 1 nan 0 1], [0 1 nan 1 0]), axistight
set(hFig2, 'Units','centimeters','OuterPosition',[0 0 x y])
set(gca,'Units','centimeters','OuterPosition',hFig2.Position)
set(gca,'LooseInset',get(gca,'TightInset'))% 验证TightInset位置
ax2 = gca;
2.确定Axes的‘Position’与‘OuterPosition’范围
c) Figure3图窗的OuterPosition=Figure2坐标区的OuterPosition, 且Figure3坐标区的OuterPosition= Figure3图窗的Position。
hFig3 =figure('Name','Fig3.OuterPosition=Fig2.axes.OuterPosition','Menubar','none');
plot([0 1 nan 0 1], [0 1 nan 1 0]), axistight
set(hFig3, 'Units','centimeters','OuterPosition',ax2.OuterPosition)
set(gca,'Units','centimeters','OuterPosition',hFig3.Position)
ax3 = gca;
d) Figure4图窗的OuterPosition=Figure3坐标区的OuterPosition
hFig4 =figure('Name','Fig4.OuterPosition=Fig3.axes.Position','Menubar','none');
plot([0 1 nan 0 1], [0 1 nan 1 0]), axistight
set(hFig4, 'Units','centimeters','OuterPosition',ax3.Position)
set(gca, 'XTickLabel',[], 'YTickLabel',[],...
'Units','normalized','Position',[0 0 1 1])
运行结果如图:
![]()
![]()
根据代码中相互引用关系大概可以确定四者关系。
实际应用时,用set(FigureHandle, , 'Position',[leftbottom width height])确定图窗尺寸,画好图后,用print函数输出即可得到所需尺寸插图(print -dpng –r300 out.png)。
值得一提的是,由于插图尺寸不超过屏幕尺寸,这里显示尺寸与打印尺寸是一致的。
2.2. 基于海报制作的位置与尺寸设置
这里要用到‘PaperSize’与‘PaperPosition’,主要作用于分页格式(PDF 和 PostScript 格式)。
‘PaperSize’用于指定页面大小,也就是纸张大小。
‘PaperPosition’控制图窗(图片)在页面上的大小和位置(指定为 [left bottom width height] 形式的四元素向量)。
简单说,将Figure图窗‘Position’内的内容,填充到尺寸为‘PaperSize’的页面的‘PaperPosition’位置上。实际使用时要注意宽高比。
不妨也验证一下:
% 设置PaperSize
X = 42.0; %
Y = 29.7; %
% 设置空白区域大小
xMargin = 5; %
yMargin = 5; %
% 设置PaperPosition的width与height
xSize = X - 2*xMargin; %
ySize = Y - 2*yMargin; %
% create figure/axis
hFig = figure('Menubar','none');
plot([0 1 nan 0 1], [0 1 nan 1 0]), axistight
set(gca, 'XTickLabel',[], 'YTickLabel',[],...
'Units','normalized', 'Position',[0.2 0.2 1 1]) % 此处将坐标区整体向右上移动,正常为[0 0 1 1]
% figure size displayed on screen (50%scaled, but same aspect ratio)
set(hFig, 'Units','centimeters','Position',[0 0 xSize ySize]/2)
movegui(hFig, 'center')
% figure size printed on paper
set(hFig, 'PaperUnits','centimeters')
set(hFig, 'PaperSize',[X Y])
set(hFig, 'PaperPosition',[xMargin yMarginxSize ySize])
set(hFig, 'PaperOrientation','portrait')
% export to PDF and open file
print -dpdf -r0 out.pdf
![]()
![]()
特别一提,
对于非PDF等页面格式文件,
当Position设置好以后,若PaperPosition与Position一致,则输出图像尺寸为Position参数;若PaperPosition与Position不一致,则根据PaperPosition值自动伸缩。
另外,当Position设置好以后,PaperPositionMode设置为auto,则输出图像尺寸为Position参数。
以上。
![]()
如果你觉得我的分享对你有帮助的话,欢迎大家在这里点赞、在看、分享。当然,也欢迎大家在这里打赏。互动越多,更新越快哦~
声明:本公众号的所有原创内容,在未经允许的情况下,不得用于任何商业用途,违者必究。