G6.设置图形的纵横比例
作者: 连玉君 (中山大学)
邮箱: arlionn@163.com
- Title: Stata绘图:如何调整图形的纵横比?
- Keywords: graphfunctions, shapes, circles, Stata画图, 正方形图形, aspect, xsize, ysize
Note: 生成文中图形的 Stata 代码统一放在了文末。
提要
绘制 Stata 图形时,可以使用 aspect(#)
设置整幅图的纵横比,也可以同时设置主体图形 (坐标轴内部区域) 的绝对尺寸 (单位为英寸),以实现对主体图形纵横比的控制。例如,下面的命令将保证图形的主体部分和整幅图形的纵横比均为 1:1。
sysuse "auto.dta", clear
scatter mpg weight, xsize(4) ysize(4) aspect(1)
1. 简介
在 Stata 中,默认情况下生成的图形通常是「扁平形」的:
sysuse "auto.dta", clear
scatter mpg weight
图 1:Stata 默认图形的纵横比
有时候我们需要调整图形的纵横比,以便得到「方形」或者「窄版」的图形。例如: - 论文为双栏排版时,插入「方形」图形更合适 (见图 2); - 将两幅图并列显示时,子图采用窄版样式更合适 (见图 3); - 绘制函数图,如圆形或三角形时,使用「方形」图形可以避免失真 (见图 4)。
图 2:纵横比为 1:1 的图形
图 3:两幅并排放置的图形
图 4:函数图 - 圆圈和三角形
2. 方形图形的绘制方法
那么,如何调整图形的纵横比呢?我们先看看生成图 2 代码:
sysuse "auto.dta", clear
scatter mpg weight, xsize(4) ysize(4) aspect(1)
可以看出,我们设定了选项 xsize(4) ysize(4) aspect(1)
来调整图形的纵横比。解释如下: - xsize(4) ysize(4)
:将图形整体 (图形区域,graph region) 的高度设为 4 英寸,宽度也设定为 4 英寸。 - aspect(1)
将绘图区域 (plot region) 的纵横比设定为 1:1,即正方形。
对于中文读者而言,很难区分 graph 和 plot 的差别。不过,你可以根据如下规则来区分它们:若以横纵坐标轴为分界,则坐标轴内围的部分为「绘图区,plot region」;坐标轴外围的部分为「图形区 (graph region)」。
因此,调整图形纵横比的「经验法则」如下: - 如果你只需保证整幅图 (包括散点、坐标轴、标题、图例和留白等) 的纵横比为 1:1,那就只需要将 xsize()
和 ysize()
设定为相同的尺寸即可。 - 如果你只需要保证图形主体部分 (坐标轴内围部分) 的纵横比为 1:1,那就只需将设定 aspect(1)
即可。不过,此时坐标轴外围可能会出现很多空白区域,因为图形整体的纵横比并未改变。
在绘制图 2 时,我采用了双管齐下的方法,即 xsize(4) ysize(4) aspect(1)
。大家可以尝试设定为 xsize(4) ysize(3) aspect(1)
,图形的整体效果或许会更协调一些。
下面的内容是为了大家更好地理解 Stata 图形的布局,以及 xsize(4) ysize(3) aspect(1)
选项的作用原理,有兴趣的读者可以继续。
3. 进阶解释
3.1 绘图区 (plot region) 与图形区 (graph region)
如果把 Stata 的图形视为一个画布,为了实现对图形的精细调整,这个画布被细分为四个区域。如 图 5 所示,从内到外,这四个区域分别由四个方框划分: - [1] + [2] 号区域称为「绘图区」(plot region) - [1] 号区域称为「内绘图区」,用于呈现散点、折线等图形元素 - [2] 号区域称为「外绘图区」,是 [1] 号区域与坐标轴之间的留白 (margin) - [3] + [4] 号区域称为「图形区」(graph region) - [3] 号区域称为「内图形区」,用于呈现图形的标题、注释、图例等文本或标注信息。 - [4] 号区域称为「外图形区」,是 [3] 号区域与图形外边界之间的留白 (margin)
简言之,若以横纵坐标轴为分界,则坐标轴内围的部分为「绘图区,plot region」,坐标轴外围的部分为「图形区 (graph region)」。
图 5:Stata 图形的区域划分 (graph region v.s plot region)
Source: [G-3] region options (
help region_option
)
多数 Stata 用户都不曾意识到 [2] 号和 [4] 号留白区域的存在,因为,在多数绘图模板中,[2] 号区与 [1] 号区都选择相同的底色,[3] 号和 [4] 号区的底色通常也都相同。
为了让大家清晰地在实际图形中分辨出上述四个区域的差别,我绘制了一幅配色「很丑」的图形,呈现于 图 6。其中,灰色区域为「plot region」,黄色部分为「graph region」,两个区域内的深色部分表示「留白 (margin)」。
图 6:Stata 图形的区域划分示例
大家可以对照如下代码查看每个区域的区分方法:
// 图 6
sysuse "auto.dta", clear
drop if mpg>38
scatter mpg weight, ///
xsize(3) ysize(3) aspect(1) ///
plotregion( ifcolor(black*0.2)) ///
plotregion( fcolor(black*0.4)) ///
yellow*0.2)) ///
graphregion(ifcolor(yellow*0.5)) graphregion( fcolor(
有兴趣的读者可以参阅 Stata 手册 [G-3] region options (或执行命令 help region_option
)。我们可以根据需要调整各种「留白」(margin) 的大小和间距。
3.2 aspect() 和 xsize()+ysize() 的区别
aspect()
和 xsize()+ysize()
的主要差别在于二者作用的范围不同。由上述分析可知,Stata 的图形区域被分为两个部分:
plot region
:这是显示数据的区域,包括坐标轴和数据点。调整aspect()
就是调整这个区域的纵横比。- 默认情况下,Stata 会根据数据范围和坐标轴刻度自动决定纵横比,但通常都小于 1。因此,设定
aspect(1)
会将纵横比调整为 1:1,从而绘制一个正方形的数据区域;而设定aspect(2)
会使得图形的高度是宽度的两倍。
- 默认情况下,Stata 会根据数据范围和坐标轴刻度自动决定纵横比,但通常都小于 1。因此,设定
grap hregion
:这是包含整个图形的区域,包括标题、坐标轴标签、图例等。调整xsize()
和ysize()
是对 graph region 的实际尺寸 (单位为英寸) 进行调整。
4. 小结
在 Stata 中,默认的图形纵横比通常较为”扁平”。当需要绘制特定纵横比的图形时(如正方形或圆形),可以使用 aspect()
选项来调整 plotregion
的纵横比。同时,如果想精确控制图形的物理尺寸并避免空白区域,可以结合使用 xsize()
、ysize()
来调整图形的整体布局。
通过理解 plot region 和 graph region 的区别,结合使用这些选项,我们可以灵活地调整图形的纵横比,同时确保图形美观、紧凑。
大家可以自行琢磨一下本文图 3 和图 3 中是如何调整纵横比的。
5. 附:文中使用的代码
*-Basic setting - 绘图模板ssc install scientific, replace
set scheme scientific
*-安装外部命令,其中包含 shapes 命令ssc install graphfunctions, replace
// Figure 1
sysuse "auto.dta", clear
scatter mpg weight
graph export "fig01_ratio_default.png", width(700) replace
// Figure 2
scatter mpg weight, xsize(4) ysize(4) aspect(1)
graph export "fig02_ratio_square.png", width(400) replace
// Figure 3
local size "xsize(2) ysize(2) aspect(1)"
scatter mpg weight if foreign==0, `size' subtitle("Domestic")
graph save temp01.gph, replace
scatter mpg weight if foreign==1, `size' subtitle("Foreign")
graph save temp02.gph, replace
graph combine temp01.gph temp02.gph, ///
xsize(7) ysize(3) ///
xcommon ycommon
graph export "fig03_ratio_combine_two.png", width(700) replace
// Figure 4
circle, n(3) rotate(90) replace // Triangle
shape circle, n(300) genx(x_c ) geny(y_c) // Circle
shape
twoway (line _y _x, lcolor(green)) ///
line y_c x_c, lcolor(blue)), ///
(xlabel(-15 15) ylabel(-15 15) ///
legend(off) ///
xsize(1) ysize(1) aspect(1)
graph export "fig04_ratio_circle.png", width(400) replace
// Figure 5
sysuse "auto.dta", clear
drop if mpg>38
scatter mpg weight, ///
xsize(3) ysize(3) aspect(1) ///
plotregion( ifcolor(black*0.2)) ///
plotregion( fcolor(black*0.4)) ///
yellow*0.2)) ///
graphregion(ifcolor(yellow*0.5))
graphregion( fcolor(graph export "graph_region_margin.png", width(600) replace
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh Stata + 绘图
安装最新版lianxh
命令:
ssc install lianxh, replace
- 专题:Stata绘图
- 连玉君, 2020, Stata绘图:用暂元统一改变图形中的字号, 连享会 No.274.
- 连玉君, 2020, Stata黑白图形模板:中文期刊风格的纯黑白图形, 连享会 No.61.
- 连玉君, 2022, Stata绘图:唯美的函数图-自定义水平附加线和竖直附加线, 连享会 No.1064.
- 连玉君, 2024, Stata 绘图:图形中的中文和英文能否设定为不同的字体, 连享会 No.1335.
- 邓鸿斌, 2021, 给你的图形化个妆:Stata绘图常用选项汇总-上篇, 连享会 No.629.
- 邓鸿斌, 2021, 给你的图形化个妆:Stata绘图常用选项汇总-下篇, 连享会 No.630.