查看原文
其他

软件应用 | 给你的图形化个妆:Stata绘图常用选项汇总-下篇

数据Seminar 2022-12-31

The following article is from 连享会 Author 连享会

本文转载自公众号连享会(ID:lianxh_cn)

作者:邓鸿斌 (暨南大学)

邮箱:Robin_dum@163.com

目录

  • 0.引言
  • 1.调整图形的标题和注释
    • 1.1 设定标题和注释的内容
    • 1.2 调整标题的位置、填充和线条等等
  • 2.分组绘图
    • 2.1 如何进行分组绘图
    • 2.2 调整美化分组绘图
  • 3.调整图例
    • 3.1 调整图例的内容
    • 3.2 调整图例的边框
  • 4.调整图形的显示比例
  • 5.调整图形整体的背景颜色及边框
  • 6.使用系统的绘图模板
  • 7.结语
  • 8.参考文献



0

引言

给你的图形化个妆:Stata绘图常用选项汇总-下篇中,我们已经介绍了如何使用相关选项来调整图形最基本的各要素,如标记符号、坐标轴以及刻度标签等等。在接下来该系列的下篇中,我们将继续介绍如何运用相关选项进行分组绘图、调整图例以及调整整体的标题、背景等等内容,以便读者能对绘图命令常用选项有更加全面的了解。

和上篇一样,本文尽量叙述地详尽细致些,以方便 stata 的初学者们进行快速理解并掌握。若不加说明,全文使用的数据默认为 sp500.dta;为使效果更加明显以方便全文讲解,若无特殊说明,执行每小节的命令之前请先执行如下命令:

 sysuse sp500, clear
   keep in 1/10



1

调整图形的标题和注释

1.1 设定标题和注释的内容

通常使用 title 选项、sutitle 选项、caption 选项以及note 选项来分别设定标题、子标题、说明以及注释的文本内容。例如,执行命令 1 twoway scatter high date, title("图1") subtitle("子标题"),可以将图形总标题设为“图 1”,将二级标题设为“子标题”,如图 1 所示。

// 命令1(图1)
. twoway scatter high date, title("图1") subtitle("子标题")   
图1-4

1.2 调整标题的位置、填充和线条等等

通常使用 position 选项和 ring 选项来调整标题的位置。其中,position 选项决定了标题在图形的几点钟方向,ring 选项则决定了标题在图形内部还是外部。例如,执行命令 2,标题将调整到图形内部的三点钟方向,并且 box 选项为标题加上了一个文本框,如图 2 所示。此外,bmargin 选项和 margin 选项能够分别控制标题外边框与图形之间的距离以及标题内部文字与外边框之间的距离。例如,执行命令 3 后,bmargin 选项中的“0 0 3 3”依次设定了边框的左边、右边、上边和下边与标题外部图形之间的间隔,而 margin 选项中的“5 5 2 2”依次设定了边框的左边、右边、上边和下边与标题内部文档内容之间的间隔,bexpand 选项则使得标题文本框与图形宽度对齐,整体效果如图 3 所示。

标题文本框的填充以及线条都可以使用相关选项进行调整。例如,执行命令 4 后,标题文本框内将填充为浅蓝色,方框线条颜色为灰色并加粗,如图 4 所示。

// 命令2(图2)
. twoway scatter high date, title("图2", position(3) ring(0) box)     

// 命令3(图3)
. twoway scatter high date, title("图3", box bmargin(0 0 3 3) margin(5 5 2 2) bexpand)     

// 命令4(图4)
. twoway scatter high date, title("图4", box fcolor(ltblue) lcolor(gray) lwidth(thick))    



2

分组绘图

类似于论文中常用到的分组回归,有时候我们也需要分组绘图。为便于解说这部分相关选项,需先执行如下几行命令以便对原始数据 sp500.dta 做一个初步的预处理。

sysuse sp500, clear
gen lower=low/100
gen Frequency=0
replace Frequency=1 if volume>=12000
keep if volume>=11700 & volume<=12200

2.1 如何进行分组绘图

通常使用 by选项对原始数据进行分组绘图。例如,执行命令 5 后,原始数据将根据“Frequency”这一变量进行分成两组并分别绘制到两幅图片上,如图 5 所示。如果我们既想看到分组样本的图形,也希望看到总体样本图形,只需执行命令 6,将新增加了总体样本散点图,共得到三幅图形,如图 6 所示。当然,这样做出来的图形仍然很粗糙,下面一小节介绍更多的选项进行调整美化。

// 命令5(图5)
. twoway scatter lower high, by(Frequency)     

// 命令6(图6)
. twoway scatter lower high, by(Frequency, total)     
图5-8

2.2 调整美化分组绘图

首先,我们可以改变以上三幅图的排列顺序。例如,如果执行命令 7,可以从之前的“先横着排列”改为“先竖着排列”,如图 7 所示。如果执行命令 8,可以在排列时将第二个位置空起来,直接跳到第三个位置进行排列,如图 8 所示。如果执行命令 9,三幅图则会排成一行而不是两行,如图 9 所示;同理,如果执行命令 10,三幅图则会排成一列而不是两列,如图 10 所示;如果执行命令 11,三幅图在排列时将会紧紧贴在一起,节省空间,如图 11 所示。

// 命令7(图7)
. twoway scatter lower high, by(Frequency, total colfirst)        

// 命令8(图8)
. twoway scatter lower high, by(Frequency, total holes(2))        

// 命令9(图9)
. twoway scatter lower high, by(Frequency, total rows(1))         

// 命令10(图10)
. twoway scatter lower high, by(Frequency, total cols(1))         

// 命令11(图11)
. twoway scatter lower high, by(Frequency, total compact)         

// 命令12(图12)
. twoway scatter lower high, by(Frequency, total iscale(*1.5))   
图9-12

其次,我们可以调整分组绘图中图形各要素的呈现方式。例如,如果执行命令 12,每幅图中的子标题将变为默认值的 3 倍大,如图 12 所示。如果执行命令 13,则只有位于末行的图形会显示 x 轴,如图 13 所示。如果执行命令 14,每幅图都会单独显示合适自己数据特点的 y 轴刻度标签,如图 14 所示。如果执行命令 15,则每幅图既会单独显示合适自己数据特点的 x 轴刻度标签,也会单独显示合适自己数据特点的 y 轴刻度标签,如图 15 所示。

// 命令13(图13)
. twoway scatter lower high, by(Frequency, total noedgelabel)        

// 命令14(图14)
. twoway scatter lower high, by(Frequency, total yrescale)     

// 命令15(图15)
. twoway scatter lower high, by(Frequency, total rescale)      

// 命令16(图16)
. twoway scatter lower high, by(Frequency, title("图16"))      
图13-16

再次,我们可以为分组绘图增加总标题。例如,如果执行命令 16,则为分组图形增添的总标题为“图 16”,如图 16 所示;注意,如果执行命令 17,则是为每一幅图都增加一个相同的标题“图 17”,如图 17 所示。当然,我们也可以调整每幅图自带的子标题。例如,如果执行命令 18,原来自带的子标题将会变成新设置的“一个子标题”,如图 18 所示。我们甚至还可以运用选项来对子标题和总标题的位置进行调整。例如,如果执行命令 19 ,分组图形的子标题将移动到 11 点钟方向但保持在图形区域里面,如图 19 所示。此外,我们可以利用 prefix 选项和 suffix 选项来分别为文本补充前缀文字和后缀文字。例如,执行命令 20,将为每幅图的子标题加上前缀“分组绘图”以及后缀“组”,如图 20 所示。

// 命令17(图17)
. twoway scatter lower high, by(Frequency) title("图17")       

// 命令18(图18)
. twoway scatter lower high, by(Frequency, subtitle("一个子标题")     

// 命令19(图9)
. twoway scatter lower high, by(Frequency, subtitle(, position(11) ring(0))   

. twoway scatter lower high,         ///
  title("图20", box bmargin(b=4)) by(Frequency) subtitle("分组绘图:", prefix) subtitle("组", suffix)     // 命令20(图20)
图17-20

最后,我们可以通过 caption 选项和 note 选项来为分组图形增添图形说明和注释。例如,如果执行命令 21,将会在分组图形的左下方增加一个总说明,如图 21 所示;如果执行命令 22,将会在每幅图的左下方都增加同一个说明,如图 22 所示。类似地,你可以对比命令 23 以及命令 24 之间的差异,它们的效果分别如图 23 和图 24 所示。

// 命令21(图21)
. twoway scatter lower high, by(Frequency, caption(说明:这是一个重要图形))   

// 命令22(图22)
. twoway scatter lower high, by(Frequency) caption(说明:这是一个重要图形)   

// 命令23(图23)
. twoway scatter lower high, by(Frequency, note(注释:这是一个注释))      

// 命令24(图24)
. twoway scatter lower high, by(Frequency) note(注释:这是一个注释)      
图21-24



3

调整图例

在绘图时,无需特别设置也会自动为你附带一个图例。但我们往往对自带的图例不完全满意,此时可以使用相关选项进行调整。

3.1 调整图例的内容

我们通常利用 legend 选项以及 label 子选项来修改图例的文字内容。例如,如果执行命令 25,图例的内容将可以显示我们自行设定的“第一个”“第二个”,如图 25 所示。

. twoway (scatter low high) (lfit low high),       ///
  legend(label(1 "第一个") label(2 "第二个"))    // 命令25(图25)

我们还可以利用 legend 选项以及 order 子选项来调整图例的排列顺序或者选择只显示某个图例,同时还能对图例内容进行修改。例如,执行命令 26,将先显示第二个图例后显示第一个图例,如图 26 所示;执行命令 27,将隐藏第一个图例,只显示第二个图例,并把图例内容修改为“线性关系”,如图 27 所示。

. twoway (scatter low high) (lfit low high),    ///
  legend(order(2 1))                             // 命令26(图26)

. twoway (scatter low high) (lfit low high),   ///
  legend(order(2 "线性关系"))                    // 命令27(图27)

. twoway (scatter low high) (lfit low high),  ///
  legend(cols(1) position(3))                  // 命令28(图28)
图25-28

我们可以用 position 子选项以及 ring 子选项来灵活调整图例的位置。例如,执行命令 28 能够将图例堆叠成一列并放置在图形的三点钟方向,如图 28 所示;如果我们执行命令 29,子选项 ring(0) 将使得图例放在图形内部,子选项 position(7) 将使得图例放在七点钟方向,如图 29 所示。而如果我们执行命令 30,图例将放置在图形的 12 点钟方向并排成一行,子选项 bexpand 使得图例与图形对齐,更加美观,如图 30 所示。

此外,还有一些其它有用选项,例如,执行命令 31 可以在显示图例时把文字显示在前面,如图 31 所示;执行命令 32 可以将图例去掉不显示,如图 32 所示。

// 命令29(图29)
. twoway (scatter low high) (lfit low high), legend(cols(1) ring(0) position(7))    
// 命令30(图30)
. twoway (scatter low high) (lfit low high), legend(rows(1) ring(0) position(12) bexpand)  

// 命令31(图31)
. twoway (scatter low high) (lfit low high), legend(textfirst)    

// 命令32(图32)
. twoway (scatter low high) (lfit low high), legend(off)       
图29-32

3.2 调整图例的边框

执行命令 33,子选项 region(fcolor(dimgray))使得图例方框内填充成暗灰色;子选项 lcolor(navy) 使得图例的外边框变成深蓝色;子选项 lwidth(thick) 使得图例外边框加粗;子选项 margin(medium) 使得边框与图例内容之间间隔中等距离的空白;子选项 bmargin(t=10) 调整了图例与图形之间的间隔,如图 33 所示。

. twoway (scatter low high) (lfit low high),       ///
  legend(region(fcolor(dimgray)) lcolor(black) lwidth(thick) margin(medium) bmargin(t=10))   // 命令33(图33)

  图33



4

调整图形的显示比例

利用 aspectratio 选项、xsize 选项以及 ysize 选项都可以对图形的显示比例进行灵活调整。例如,执行命令 34 后,图形将变得扁长,这是因为 0.3 小于 1,如图 34 所示;若换成命令 35 则会变得瘦长,如图 35 所示。如果执行命令 36,x 轴将设置为 3 英寸,y 轴将设置为 1 英寸,如图 36 所示,用这种方式同样可以调整图形的显示比例。

此外,利用 scale 选项还能在不改变图形整体大小下灵活调整文本以及标记符号显示的大小。例如,执行命令 37 后,坐标轴标题、坐标轴刻度标签以及标记符号都变得较小,这是因为我们设定了大于 1 的 1.6,如图 37 所示。如果我们想绘制一个较小的图形,这个选项就非常有用,因为可以将图形中的文本信息清晰地显示出来。

// 命令34(图34)
. twoway scatter low high, aspectratio(0.3)      

// 命令35(图35)
. twoway scatter low high, aspectratio(1.3)      

// 命令36(图36)
. twoway scatter low high, xsize(3) ysize(1)     

// 命令37(图37)
. twoway scatter low high, scale(1.6)     
图34-37



5

调整图形整体的背景颜色及边框

如果执行命令 38,图形在坐标轴内部区域将被填充为灰色背景,如图 38 所示。如果执行命令 39,图形在坐标轴外围区域将被填充为浅蓝色背景,如图 39 所示。

此外,我们还能对边框进行灵活调整。例如,执行命令 40,坐标轴外围区域的边框线条将变成红色并且加粗,如图 40 所示。如果执行命令 41,坐标轴内部区域的边框线条将变成浅蓝色并且加粗,如图 41 所示。

// 命令38(图38)
. twoway scatter high date, plotregion(color(gray))     

// 命令39(图39)
. twoway scatter high date, graphregion(color(ltblue))  

// 命令40(图40)
. twoway scatter high date, graphregion(lcolor(red) lwidth(vthick))   

// 命令41(图41)
. twoway scatter high date, title("看看这个图") plotregion(lcolor(ltblue) lwidth(vthick))   
图38-41



6

使用系统的绘图模板

最后,给大家介绍一个偷懒的方法。使用 scheme 选项可以调用系统配套的一系列绘图模板。例如,执行命令 42 可以调用系统灰色风格的绘图模板,如图 42 所示;执行命令 43 可以调用最常用到的绘图模板,如图 43 所示。执行命令 44 可以调用一个非常独特的绘图模板,其 y 轴在右边而不是左边,图例在上边而不是下边,如图 44 所示。执行命令 45 所调用的绘图模板独特之处在于其使用了虚线,如图 45 所示。除此之外,你可以尝试其它的绘图模板如 scheme(s1color)scheme(s1momo)以及 scheme(s1manual) 等等,并仔细对比它们之间的差异,选择自己喜欢的模板进行绘图。

// 命令42(图42)
. twoway scatter high date, scheme(s2mono)       

// 命令43(图43)
. twoway scatter high date, scheme(s2color)      

// 命令44(图44)
. twoway (scatter high date) (lfit high date), scheme(economist)      

// 命令45(图45)
. twoway (scatter high date) (lfit high date), scheme(sj) 
图42-45

你也许会问:既然可以偷懒那前面学那么多有什么用?个人认为,熟悉选项才能帮助你更熟练掌握 Stata,并且在论文写作过程中,我们常常需要在一些特殊情况下进行细微的调整和修改,这时候你若熟悉各个选项的使用将可以快速解决问题!


7

结语

至此,本系列上下篇都已完结。希望读者能感受到选项的重要性,在今后 stata 的学习中能够熟悉并灵活利用相关选项,快速解决自己遇到的“疑难杂症”。


8

参考文献


  • Mitchell M N. A Visual Guide to Stata Graphics(Third Edition)[M] Published by Stata Press, 2012

本文转载自公众号:连享会(ID:lianxh_cn),作者:连享会。

  




星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧


往期推荐


软件应用 | 给你的图形化个妆:Stata绘图常用选项汇总-上篇

软件应用 | Stata:面板数据缺失值与多重补漏分析-twofold

热点资讯 | 北京大学国家发展研究院博士后招聘启事

付定享优惠 转发得数据

统计计量 | 内生性解决办法大全!!!

统计计量 | 关于DID平行趋势检验基准组的选择

付定享优惠 转发得数据





数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


推荐 | 青酱


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存