软件应用 | 给你的图形化个妆:Stata绘图常用选项汇总-上篇
The following article is from 连享会 Author 连享会
本文转载自公众号连享会(ID:lianxh_cn)
作者:邓鸿斌 (暨南大学)
邮箱:Robin_dum@163.com
目录
0. 引言 1. 标记符号 (msymbol)
1.1 标记符号的形状 1.2 标记符号的大小 1.3 标记符号的填充和轮廓 1.4 组合拳 1.5 使用系统设定风格 2. 标记符号标签的相关选项
2.1 为标记符号创建标签 2.2 标记符号的标签位置、角度、大小以及颜色等 3. 利用选项将散点连接起来
3.1 连接方式 3.2 线条的颜色和粗细等 4. 坐标轴标题相关选项
4.1 添加坐标轴标题 4.2 坐标轴标题的排列、大小以及颜色等 5. 坐标轴刻度标签
5.1 坐标轴刻度标签的个数、间隔以及刻度条 5.2 坐标轴刻度标签的角度、大小、粗细等等 6. 坐标轴
6.1 坐标轴的位置 6.2 坐标轴的取值范围 6.3 坐标轴的线条 6.4 坐标轴的个数 7. 未完待续 8. 参考文献
引言
我们学完 stata 之后,在实际运用 stata 写论文时常常发现自己力不从心,往往陷入这样一种困境:“这命令我知道啊,可是我需要这样那样的效果却没办法实现,百度也很难百度出来,好绝望啊”!主要原因还是在于我们对命令附带的相关选项不熟悉。用好 stata 的关键在于用好它的选项!
本文将以绘图命令的相关选项为例,展示如何通过运用相关选项来调整图形的各个方面,以便达到我们需要的一些特殊效果。希望借此启发读者注意学习并熟悉其它类型命令的相关选项。
本文尽量叙述地详尽细致些,以方便 stata 的初学者们进行快速理解并掌握。若不加说明,全文使用的数据默认为 sp500.dta;为使效果更加明显以方便全文讲解,若无特殊说明,执行每小节的命令之前请先执行如下命令:
. sysuse sp500, clear
. keep in 1/10
标记符号 (msymbol)
1.1 标记符号的形状
考虑到这是推文介绍的第一个选项,稍微花点篇幅进行细致讲解。
举个最简单的例子。当我们执行如下命令 1 时,标记符号使用了系统绘图默认的实心圆,效果如图 1 所示。此时,可以通过msymbol()
选项来调整标记符号的形状,从而让图形更加美观。例如,执行命令 2 可以将图 1 中的标记符号从实心圆调整成实心方块,如图 2 所示。msymbol(S)
中的 S
是 square
的缩写,表示方块。再比如,选项换成 msymbol(s)
可以进一步将图 2 中的标记符号从大的实心方块调整成小的实心方块。类似地,msymbol(t)
对应的标记符号为小三角形;msymbol(sh)
对应的标记符号为小的空心方块,括号的的 h
对应 hollow
,表示空心的意思;msymbol(X)
对应的标记符号为大的叉号;msymbol(+)
对应的标记符号为十字号;msymbol(p)
对应的标记符号为小点。你可以分别尝试并进行对比。
// 命令1(图1)
. twoway scatter high date
// 命令2(图2)
. twoway scatter high date, msymbol(S)
那如果同一张图中有两组线性数据,msymbol
选项能进行调整吗?当然可以!未加入 msymbol
选项时,两组数据图形的标记符号都是实心圆。而当我们加入 msymbol
选项,即执行命令 3 ,第一组线性数据在图中的标记符号为默认的实心圆,第二组线性数据在图中的标记符号变成了空心圆,如图 3 所示。类似地,执行命令 4 后,第一组线性数据在图中的标记符号变成了实心小三角,第二组线性数据在图中的标记符号依然为空心圆,如图 4 所示。
// 命令3(图3)
· twoway (scatter high date, msymbol(.)) ///
(scatter low date, msymbol(Oh))
// 命令4(图4)
. twoway (scatter high date, msymbol(t)) ///
(scatter low date, msymbol(Oh))
1.2 标记符号的大小
我们通常使用 msize
选项来调整标记符号的大小。
例如,执行命令 5 能够将原先的空心圆标记符号变小,如图 5 所示。当然,你也可以利用“放大或缩小默认值的倍数”这种方式来进行更加灵活的调整,例如执行命令 6,能将空心圆标记符号的大小调整为默认值的 0.5 倍,如图 6 所示;命令 7 能将空心圆标记符号的大小调整为默认值的 2 倍,如图 7 所示。类似地,如果同一张图形中有两组线性数据,也可以通过命令 8 这种方式分别对两组线性数据进行不同控制,如图 8 所示。
// 命令5(图5)
. twoway scatter high date, msymbol(Oh) msize(small)
// 命令6(图6)
. twoway scatter high date, msymbol(Oh) msize(*0.5)
// 命令7(图7)
. twoway scatter high date, msymbol(Oh) msize(*2)
// 命令8(图8)
· twoway (scatter high date, msize(*0.5)) (scatter low date, msize(*0.2))
1.3 标记符号的填充和轮廓
这部分内容非常类似于 Excel 或 Word 中表格的调整。我们可以运用 mcolor
选项来调整标记符号整体的颜色,例如,执行命令 9 后,标记符号整体颜色将变成红色,如图 9 所示。而如果将 mcolor(red)
换成 mcolor(navy)
,标记符号整体颜色则会变成深蓝色。
那我们能跟 Excel 或 Word 中的表格一样将内部填充和轮廓分别进行不同调整和控制吗?完全没问题!尝试执行命令 10,你将得到浅蓝色填充颜色以及黑色轮廓的标记符号,如图 10 所示;其中,mfcolor
选项控制内部填充颜色,mlcolor
选项控制外面轮廓。当然,我们也可以跟 Excel 或 Word 中的表格一样将轮廓(边框)进行加粗,此时只需加上 mlwidth
选项即可,例如命令 11 ,如图 11 所示,与前面相同的逻辑,mlwidth(*2)表示将轮廓粗细调整为默认值的两倍,后面遇到类似逻辑将不再赘述。
// 命令9(图9)
. twoway scatter high date, mcolor(red)
// 命令10(图10)
. twoway scatter high date, mfcolor(ltblue) mlcolor(black)
// 命令11(图11)
. twoway scatter high date, mfcolor(ltblue) mlcolor(black) mlwidth(*2)
1.4 组合拳
我们可以同时使用 1.1~1.3 部分介绍的这些小技巧对同一张图形进行美化。例如,执行命令 12 后可以发现,该图中标记符号的形状、大小、填充和轮廓都进行了相应的调整和设定,如图 12 所示。读者可自行尝试其它不同的搭配形式。
// 命令12(图12)
. twoway scatter high date, msymbol(S) msize(small) mfcolor(ltblue) mlcolor(black) mlwidth(*2)
1.5 使用系统设定风格
stata 系统中有一系列设定好的风格,分别以 p1、p2、p3....命名。这些设定好的风格已经对前面 1.1~1.4 部分介绍的标记符号形状、大小、填充和轮廓都进行了合理的搭配,如果你觉得前面对每一项单独设置调整比较麻烦,也可直接使用系统设定好的风格,加入 mstyle
选项,例如 mstyle(p3)
。但建议最好还是尽量逼迫自己学会对每一项单独进行灵活调整,才能做出比较美观的图形。
标记符号标签的相关选项
有时候我们需要在图形上面的散点增加标签,以便呈现数据更多方面的信息。以下总结了这方面相关的一些通用和常用的选项。
2.1 为标记符号创建标签
运用 mlabel
选项即可为标记符号创建对应标签。例如,执行命令 13 便可以在为每一个点添加上对应的“交易量”这一信息,如图 13 所示。当然,一些特殊情形下我们不想呈现标记符号而仅保留标签,可以进一步加上 1.1 节介绍的 msymbol
选项,执行命令 14 即可将标记符号隐藏起来,如图 14 所示。
// 命令13(图13)
. twoway scatter high date, mlabel(volume)
// 命令14(图14)
. twoway scatter high date, mlabel(volume) msymbol(i)
2.2 标记符号的标签位置、角度、大小以及颜色等
标签的位置通常用 mlabpos
选项进行调整,例如:命令 15 能将所有标签的位置都调到标记符号的六点钟方向(即正下方),如图 15 所示。另外,如果想为不同散点的标签设立不同的位置,只需要在原始数据中增加一列新变量(例如 position),然后在这列变量中为每一散点输入你想设定的位置如 3、6、9,加入 mlabvpos(position)
后散点的标签位置将分别按照 position 变量中设定的位置进行调整如 3 点钟方向、6 点钟方向、9 点钟方向。
标签的角度通常用 mlabangle
选项进行调整,例如:执行命令 16 后,标签将沿着 30 度线倾斜呈现,如图 16 所示。
标签的大小通常用 mlabsize
选项进行调整,例如:mlabsize(vsmall)
意味着标签将变得特别小(vsmall=very small),而执行命令 17 则能将标签大小灵活调整为默认值的 0.5 倍,如图 17 所示。
通常用 mlabcolor
选项和 mlabgap
选项来分别调整标签的颜色以及标签与标记符号之间的距离,例如:执行命令 18 后,标签颜色将变成红色,标签与标记符号之间的距离将灵活调整为默认值的 4 倍,如图 18 所示。
// 命令15(图15)
. twoway scatter high date, mlabel(volume) mlabpos(6)
// 命令16(图16)
. twoway scatter high date, mlabel(volume) mlabangle(30)
// 命令17(图17)
. twoway scatter high date, mlabel(volume) mlabsize(*0.5)
// 命令18(图18)
. twoway scatter high date, mlabel(volume) mlabcolor(red) mlabgap(*4)
利用选项将散点连接起来
3.1 连接方式
我们还可以利用选项选择不同类型的线条将散点连接起来。例如:添加 sort
便能够将此前孤立的散点连接起来。在此基础上,通过添加 connect
选项可以灵活选择连接散点的不同线型。例如,执行 命令 19 将使用“J”型线条将散点连接起来,如图 19 所示;执行命令 20 将使用阶梯型线条将散点连接起来,形状刚好与图 19 相反,如图 20 所示;执行命令 21 的效果与一般的折线图相似,如图 21 所示。
// 命令19(图19)
. twoway connected high date, connect(J) sort
// 命令20(图20)
. twoway connected high date, connect(stepstair) sort
// 命令21(图21)
. twoway connected high date, connect(L) sort
3.2 线条的颜色和粗细等
当然,与前面各节思路一样,线条的颜色、粗细以及线型等等都能运用相关选项进行灵活调整。例如,执行命令 22 后的效果如图 22 所示,其中,lcolor(red)
选项将线条颜色调整为红色,lwidth(thick)
选项将线条加粗,lpattern(dash)
选项将线型设置为虚线。
// 命令22(图22)
. twoway connected high date, sort lcolor(red) lwidth(thick) lpattern(dash)
坐标轴标题相关选项
4.1 坐标轴标题
利用 ytitle
和 xtitle
选项能分别为 y 轴和 x 轴添加坐标轴标题。例如,执行如下命令后,分别将 y 轴和 x 轴的标题设置为“The A-Share Stocks' High Price of the Date of Transaction”以及“The Date of Transaction”,如图 23 所示。当然,这样的坐标轴标题呈现效果是非常粗糙的,需要进一步运用一些常用选项对其进行调整。
// 命令23(图23)
. twoway scatter high date, ///
ytitle("The A-Share Stocks' High Price of the Date of Transaction") ///
xtitle("The Date of Transaction")
4.2 坐标轴标题的排列、大小以及颜色等
首先,我们发现 y 轴的标题名称太长了,此时可用两个双引号将 y 轴名称分成两部分。例如,改成以下几行命令后,得到的图形效果如图 24 所示。
// 命令24(图24)
. twoway scatter high date, ///
ytitle("The A-Share Stocks' High Price" "of the Date of Transaction") ///
xtitle("The Date of Transaction")
其次,使用 size
选项和 color
选项能够灵活调整坐标轴标题的大小以及颜色。例如,将前述命令改为以下几行之后,坐标轴标题的大小变为默认值的 1.5 倍,颜色变成红色,如图 25 所示。
// 命令25(图25)
. twoway scatter high date, ///
ytitle("The A-Share Stocks' High Price" "of the Date of Transaction") ///
xtitle("The Date of Transaction", size(*1.5) color(red))
此外,如果我们有两组线性数据但二者的 y 轴不一样时,可以创建两个 y 轴并将它们在同一张图形中展示吗?增加一个选项就能完成!例如,以下两行命令中,yaxis(2)
选项就帮助我们在右边创建了第二个 y 轴,如图 26 所示。
// 命令26(图26)
. twoway (scatter high date) (scatter low date, yaxis(2))
最后,有两组线性数据的情况下创建完两个 y 轴后,如何调整两个 y 轴的标题呢?如下面几行命令所示,只需要添加 axis(1)
选项和 axis(2)
即可分别创建并灵活调整两个 y 轴的标题。执行完的效果如图 27 所示。其中,axis(1)
选项表示第一个坐标轴,而axis(2)
选项表示第二个坐标轴。例如 y 轴在左边就是 y 轴的第一个坐标轴,而 y 轴在右边就是 y 轴的第二个坐标轴。
// 命令27(图27)
. twoway (scatter high date) (scatter low date, yaxis(2)), ///
ytitle("The A-Share Stocks' High Price" "of the Date of Transaction", axis(1)) ///
ytitle("The A-Share Stocks' low Price" "of the Date of Transaction", axis(2))
坐标轴刻度标签
5.1 坐标轴刻度标签的个数、间隔以及刻度条
绘制的每张图形无需特别设定,都会有自带默认的坐标轴刻度标签。例如,执行没有特别的选项的命令,也会自带坐标轴刻度标签,但效果常常无法让我们满意。我们同样可以利用一些常用选项来对此进行灵活调整。
首先,我们可以调整坐标轴上出现的刻度标签的个数。例如,执行命令 28 ,x 轴将设定为 5 个刻度标签,y 轴将设定为 8 个刻度标签,如图 28 所示。这主要是通过其中的 xlabel(#5)
和 ylabel(#8)
选项来灵活设定调整的。
我们也可以设定刻度的上下界以及相邻两个刻度之间的间隔值,即刻度间距。例如,执行命令 29 后,选项 ylabel(1290(10)1360)
规定了 y 轴的刻度标签从 1290 变化到 1360,并且相邻两个刻度之间的间隔 10 个单位,如图 29 所示。一个更加简洁好玩的图形是:执行命令 30 后,x 轴既没有刻度标签也没有刻度条,而 y 轴则仅有最大值和最小值两个刻度标签,如图 30 所示;类似地,执行 命令 31 后,y 轴只有刻度条没有刻度标签,如图 31 所示;而执行命令 32 后,y 轴只有刻度标签没有刻度条,如图 32 所示。
// 命令28(图28)
. twoway scatter high date, xlabel(#5) ylabel(#8)
// 命令29(图29)
. twoway scatter high date, ylabel(1290(10)1360)
// 命令30(图30)
. twoway scatter high date, xlabel(none) ylabel(minmax)
// 命令31(图31)
. twoway scatter high date, ylabel(, nolabel)
我们还可以使用 xmlabel
和 ymlabel
选项来为坐标轴添加二级刻度标签(minor label or numeric label)。例如,执行命令 33,y 轴将新增加了二级刻度标签,从 1295 开始到 1355,并且二级刻度标签中相邻两个刻度之间间隔 10,如图 33 所示。注意,ylabel
对应主刻度标签,而ymlabel
对应二级刻度标签。
此外,我们可以用 xtick
和 ytick
选项来为坐标轴增添刻度但不显示标签值。例如,执行命令 34 ,y 轴将增加了“1295、1305、1315、1325、1335、1345、1355”共七个刻度条,但没有刻度标签(即不显示数值),如图 34 所示,这样既增加了精确度但又不会显得特别拥挤。类似地,我们如果将选项换成 ymtick(1295(10)1355)
,y 轴增加的七个刻度条将会以二级刻度条的形式出现。注意,ytick
对应主刻度条,而 ymtick
对应二级刻度条。如果执行命令 35,y 轴相邻两个主刻度之间将新增加 5 个二级刻度条,如图 35 所示。
// 命令32(图32)
. twoway scatter high date, ylabel(, noticks)
// 命令33(图33)
. twoway scatter high date, ymlabel(1295(10)1355)
// 命令34(图34)
. twoway scatter high date, ytick(1295(10)1355)
// 命令35(图35)
. twoway scatter high date, ymtick(##5)
5.2 坐标轴刻度标签的角度、大小、粗细等等
一般使用 ylabel(, angle())
选项来对刻度标签的角度进行调整。例如,y 轴刻度标签默认是垂直的(90 度),若执行命令 36,y 轴刻度标签将变成水平(0 度),而 x 轴刻度标签将设置成 45 度,如图 36 所示。
一般使用 labsize
选项来对刻度标签的大小进行调整。例如,执行命令 37 后,y 轴刻度标签将得特别小,如图 37 所示。
// 命令36(图36)
. twoway scatter high date, ylabel(, angle(0) xlabel(, angle(45))
// 命令37(图37)
. twoway scatter high date, ylabel(, labsize(vsmall))
一般使用 labgap
选项来调整刻度标签与刻度条之间的距离。例如,执行命令 38 后,y 轴刻度标签与刻度条之间的距离将变成默认值的 8 倍,如图 38 所示。
一般使用 grid
选项来对网格线进行调整,以便读者更快速看出散点对应到 y 轴的刻度标签。绘图时默认是附带网格条的,执行命令 39 后,将去除网格条,如图 39 所示。此外,我们还可以对网格线的粗细、颜色以及线型进行灵活调整。例如,执行命令 40,选项 glwidth(vthin)
使得网格线变得特别细,选项 glcolor(gs10)
使得网格线变成灰色,选项 glpattern(shortdash)
使得网格线变成短虚线,如图 40 所示。
另外,我们也可以调整坐标轴刻度条的粗细、长度以及位置。例如,执行命令 41 ,选项 tlength(large)
使得刻度条变长,选项 tlwidth(thick)
使得刻度条加粗,选项 tposition(crossing)
使得刻度条与 y 轴交叉,如图 41 所示。
// 命令38(图38)
. twoway scatter high date, ylabel(, labgap(*8))
// 命令39(图39)
. twoway scatter high date, ylabel(, nogrid)
// 命令40(图40)
. twoway scatter high date, ylabel(, grid glwidth(vthin) glcolor(gs10) glpattern(shortdash))
// 命令41(图41)
. twoway scatter high date, ylabel(, tlength(large) tlwidth(thick) tposition(crossing))
坐标轴
6.1 坐标轴的位置
我们可以将整个坐标轴隐藏起来,例如执行命令 42 后,不再显示 x 坐标轴,如图 42 所示;也可以将坐标轴从下面搬到上面,例如命令 43,如图 43 所示;甚至还可以将坐标轴转个方向,例如将 xscale
选项转换为 xscale(reserve)
后,x 轴的原点将移到最右边,也即从左到右是按从大到小的顺序排列。
// 命令42(图42)
. twoway scatter high date, xscale(off)
// 命令43(图43)
. twoway scatter high date, xscale(alt)
6.2 坐标轴的取值范围
yscale
选项也可以对 y 轴上呈现的数据范围进行设定调整。例如,执行命令 44 后,y 轴呈现范围从 1280 到 1350,如图 44 所示。前面介绍过 ylabel
选项也能调整刻度标签的取值范围,但注意二者是有区别的,yscale
虽然呈现指定的取值范围,但由于小于 1300 范围内因为没有对应的数据,因此并不显示刻度标签。
当原始数据是对数分布时,我们除了可以对某一变量进行取对数以外,也可以将坐标轴变成对数分布形式,即相邻刻度之间不再是等间隔相等的数值单位。例如,执行命令 45 后,y 轴将等分为 5 个刻度条“1 10 100 1000 10000”,但它们之间并非间隔相等的数值单位,而是呈对数分布形式,如图 45 所示。
// 命令44(图44)
. twoway scatter high date, yscale(range(1280 1350))
// 命令45(图45)
. twoway scatter high date, yscale(log) ylabel(1 10 100 1000 10000)
6.3 坐标轴的线条
我们也可以对坐标轴的线条进行调整。例如,执行命令 46 后,x 轴将会加粗,如图 46 所示;执行命令 47 后,将不会在图形中显示 x 轴,如图 47 所示;执行命令 48 后,将只显示 x 轴的刻度标签而不显示坐标轴横线,如图 48 所示。
// 命令46(图46)
. twoway scatter high date, xscale(lwidth(thick))
// 命令47(图47)
. twoway scatter high date, xscale(off)
// 命令48(图48)
. twoway scatter high date, xscale(noline)
6.4 坐标轴的个数
前面 4.2 节介绍过在两组数据的情形下如何设置两个 y 轴坐标标题,与此类似,这里介绍如何使用 yaxis
选项设置两个 y 轴坐标。例如,执行命令 49 后,第一组数据将对应左边的 y 轴,第二组数据将对应右边的 y 轴,如图 49 所示。
// 命令49(图49)
. twoway (scatter high date, yaxis(1)) (scatter low date, yaxis(2))
未完待续
目前为止,我们已经介绍了如何使用相关选项来调整图形最基本的各要素,如标记符号、坐标轴以及刻度标签等等。我们将在给你的图形化个妆:Stata绘图常用选项汇总-下篇中继续介绍如何运用相关选项进行分组绘图、调整图例以及调整整体的标题、背景等等,以便读者能对绘图命令常用选项有更加全面的了解。
参考文献
Mitchell M N. A Visual Guide to Stata Graphics(Third Edition)[M] Published by Stata Press, 2012
本文转载自公众号:连享会(ID:lianxh_cn),作者:连享会。
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
统计计量 | 内生性解决办法大全!!!
统计计量 | 关于DID平行趋势检验基准组的选择
数据治理|Stata如何直连关系型数据库
统计计量 | 双重差分法(DID)平行趋势检验的Stata操作
数据可视化 | 快来看这6款常用的动态数据可视化工具
软件应用 | Stata: 外部命令的搜索、安装与使用
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 青酱
欢迎扫描👇二维码添加关注