查看原文
其他

软件应用 | Stata绘图极简新模板:plotplain和plottig

连享会 数据Seminar 2022-12-31

本文转载自公众号Stata连享会

作者:苗妙 (华南理工大学)

Source: Daniel Bischof, 2017, New Graphic Schemes for Stata: Plotplain and Plottig, Stata Journal, 17(3): 748–759. -PDF-, -PDF2-, -Link-

简介

运用Stata画图是论文写作中必不可少的环节。然而朋友们是否有这样的经历,当我们想根据自己的需要对画图模板进行调整的时候,总是无法绘制出自己心中完美的图形。事实上,随着Stata计算能力的大大提升,很多功能都有了大幅改进,相比于Stata其他方面的改进,它提供的画图模板改进的却不多。今天的推文就给大家介绍两个绘制极简图形的模板,这两个模板结合主流期刊对论文图形的要求,对现有的画图模板进行了改进,简单方便,直接下载plotplainplottig的主题就可以直接使用哦。值得一提的是,这两个主题对色盲朋友们也更加友好。

安装新模板:plotplain 和 plottig

命令安装和数据下载

首先,我们下载作图模板程序文件和示例数据,输入下列代码之后,进入下载页面:

. net sj 17-3 gr0070  // 查看命令下载页面

方式1:用 Stata 命令直接安装和下载,命令如下:

. net install gr0070.pkg // 安装外部命令
  * 等价于单击 「(click here to install)」

. net get gr0070.pkg // 下载数据和文件和 dofile
  * 等价于单击 「(click here to get)」

操作如下:

  • 点击 (click here to install), 安装相应的程序文件
  • 点击 (click here to get),获取本文示例的excel格式数据及do文件的作图代码

数据预处理

这份数据是全球 207 个国家 1970-2014 年遭遇恐怖袭击事件后的死伤人数统计。导入数据后,我们对country 和 region 变量进行转换,并基于12个地区35年的数据,对恐怖袭击后的死伤人数进行加总。

clear all
*导入数据
import excel "globalterrorismdb_0615dist_short.xlsx", sheet("Blatt1") firstrow
save "rep_plotplain_plottig.dta", replace 
drop _all

*处理数据,用于作图
use "rep_plotplain_plottig.dta"
rename country country1  
rename region region1
encode country_txt, gen(country)
encode region_txt, gen(region)
gen counter=1

collapse (sum) counter nkill nwound, by(region iyear)
xtset region iyear
tsfill

rename counter nevents
label var nevents "logged number of terrorist events"
label var nkill "logged number of people killed"
label var nwound "logged number of people wounded"
label var iyear "incident year"

forval i=1/15 {
    gen n`i'=`i'
}
replace nkill=log(nkill+1)
replace nwound=log(nwound+1)
replace nevents=log(nevents+1)

基于此,我们生成了地区-年份层面面板数据,主要变量如下:

  • nevents: 恐怖事件次数的对数
  • nwould: 恐怖事件中受伤人数的对数
  • nkill: 恐怖事件中死亡人数的对数

Stata 默认模板及局限

下面我们首先使用 Stata 的默认画图模板绘图,并指出绘图中的限制。

默认模板 s2mono 的效果

图 1是散点图,图 2是折线图。作图命令如下:

*图1
graph twoway (scatter nkill nevents if region==12 & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==7  & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==6  & nevents<=500 & nkill<=1000) ///
, scheme(s2mono) legend(label(1 Western Europe) label(2 North America) label(3 MENA)) title("s2mono")

*图2
graph twoway (line nevents iyear if region==12) (line nevents iyear if region==7) (line nevents iyear if region==6), ///
scheme(s2mono) legend(order(1 "Western Europe" 2 "North America" 3 "MENA"))  title("s2mono") xline(2003) ///
text(8 2003  "Iraq war", place(e)) xlabel(1970(10)2015)
图1 地区恐怖袭击散点图( Stata 默认模板)
图2 地区恐怖袭击折线图( Stata 默认模板)

Stata 默认模板作图的局限

这两张图应该是大家非常熟悉的绘图主题,那么现在我们来分析一下,图 1 和图 2 存在哪些问题呢?总结起来,有如下几个方面:

  • y 轴的标签是纵向的,读起来很不方便
  • 灰色的图片背景,导致图片被灰色框所围绕
  • 散点图中的标记和线条过粗,导致有些重合的点无法分辨
  • 图例中的标识符号可以更小一点,因为在有些情况下,图例中的标识过大可能出现重合问题
  • 只有平行于 x 轴的网格线,平行于 y 轴的网格线缺失
  • 图例的外框可以省去
  • 图例可以离数据更近一些,放在下方会强迫读者把注意力放在图片的下方
  • 坐标轴的颜色可以与背景及数据点区分开
  • 大多数的默认颜色不适于色盲人群

plotplain 和 plottig 绘图主题的极简化改进

plotplain 的绘图效果

采用新绘图主题的选项,我们绘制出了图 3 和 图 4。即在代码中,我们在 scheme 的选项中写入plotplain。如果想绘制色盲者可以识别的彩色图,我们将 plotplain 替换成 plotplainblind 即可。感兴趣的读者可以自行尝试。

*图3
graph twoway (scatter nkill nevents if region==12 & nevents<=500 & nkill<=1000) ///
 (scatter nkill nevents if region==7  & nevents<=500 & nkill<=1000) ///
 (scatter nkill nevents if region==6  & nevents<=500 & nkill<=1000) ///
 , scheme(plotplain) legend(label(1 Western Europe) label(2 North America) label(3 MENA))  title("plotplain"
*图4
图3 地区恐怖袭击散点图(黑白图改进版本)
图4 地区恐怖袭击折线图(黑白图改进版本)

下面,大家来做个小游戏,一起来找区别呀!请大家来观察一下改进后的图 3 和图 4,与图 1 和图 2 的区别在哪里呢?其实,对应于 2.3 小节我们总结的 Stata 默认图示的缺陷,图 3 和图 4 逐一进行了改进。总结如下:

  • y 轴的标签是横向的,读起来更加方便啦
  • 灰色的图片背景被删除了,替换成了白色背景,图片更加柔和
  • 散点图中的标记和线条更细,使我们更容易分辨出重合的位置
  • 图例中的标识符号更小
  • 增加了平行于 y 轴的网格线,且网格线采用了极细的灰色虚线表示,不容易分散读者注意力
  • 去除图例的外框
  • 图例放在了图片的右侧
  • 坐标轴的颜色改为灰色,更容易融入绘图背景
  • plotplainblind主题增加了七种颜色,这七种颜色对于色盲的人而言,都是可以区分的

plottig 的绘图效果

图 5 展示了采用 plottig 主题的绘图。它与 plotplain 主题的区别主要是,背景的颜色可以提高标识和颜色的区分度。我们也可以看到,图 1 和图 2 的背景色存在于图片周围,而图 5 职中的背景色是均匀底色。同时,右上方和右下方的两幅色盲版本图,采用 14 色的调色板,对色盲人群更加友好。绘图命令和绘制图形如下:

*散点图
graph twoway (scatter nkill nevents if region==12 & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==7  & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==6  & nevents<=500 & nkill<=1000) ///
, scheme(plottig) legend(label(1 Western Europe) label(2 North America) label(3 MENA)) name(s2m1) title("plottig")
graph twoway (scatter nkill nevents if region==12 & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==7  & nevents<=500 & nkill<=1000) ///
(scatter nkill nevents if region==6  & nevents<=500 & nkill<=1000) ///
, scheme(plottigblind) legend(label(1 Western Europe) label(2 North America) label(3 MENA)) name(s2c1) title("plottigblind")

*折线图
graph twoway (line nevents iyear if region==12) (line nevents iyear if region==7) (line nevents iyear if region==6), ///
scheme(plottig) legend(order(1 "Western Europe" 2 "North America" 3 "MENA")) name(s2m2, replace) title("plottig") xline(2003) ///
text(8 2003  "Iraq war", place(e))
graph twoway (line nevents iyear if region==12) (line nevents iyear if region==7) (line nevents iyear if region==6), ///
 scheme(plottigblind) legend(order(1 "Western Europe" 2 "North America" 3 "MENA"))  name(s2c2) title("plottigblind") xline(2003) ///
text(8 2003  "Iraq war", place(e))

*图形组合  
graph combine s2m1 s2c1 s2m2 s2c2, iscale(0.5)  
graph export plotplain5.eps, replace
graph drop s2m1 s2c1 s2m2 s2c2
图5 地区恐怖袭击折线图(带背景色以及针对色盲人群的改进版本)

plotplain 和 plottig 绘图主题的调色板展示

看了这么多图,也许你也疲劳了,让我们来欣赏一下美丽的调色板。大家画图的时候,只需要查看一下图 6 的调色板,选择适合的颜色,不用一个一个去试了哦。

图6 plotplainplottig 的调色板

绘图主题的个性化定制

如果你对上面改进的绘图仍然不满意,没关系,我们还可以根据这个模板进行个性化的改进。由于 Stata 绘图主题的编程语法与标准的 Stata 语法有所不同,因此我们建议使用者在已有的主题上进行改进,而不是建立全新的主题模板。下面,我们对此提供一些思路和建议。

绘图主题的语法格式

建立一个简单的 text editor (.txt file),用于创建主题。但要确保后缀是.scheme,而不是.txt。命令的语法格式为:

characteristic object option

比如,当我们相对颜色这个特征,针对背景这一对象,设定为白色时,就可以写成:

color background white

当你想把背景色改成黑色时,只需将 white 改成 black。再比如,如果想把坐标轴的灰色换成黑色,可以打开主题的备份文档,寻找下面这一命令,并将 gs10 修改为 black。:

color axisline gs10

plottig 绘图主题中的常用选项

除了更改背景颜色,我们以 plottig 为例,给大家介绍一些常用的主题绘制选项。

  • clockdir: 控制对象的位置
  • color: 控制对象的颜色
  • linepattern: 控制图像内的线条样式(比如 shortdash )
  • linestyle: 控制图像外的线条样式
  • linewidth: 线条大小
  • gsize: 对象的大小
  • margin: 对象间的边距
  • numticks_g: 坐标轴上标尺的数量
  • symbol: 标识的样式(比如散点图中的 circle )
  • symbolsize: 标识的大小
  • tickstyle: 标尺的样式(比如标签的标尺)
  • yesno:只是在特定命令的选项后面加上 yes 或是 no , 比如 yesno draw_major_grid yes 控制了 plottig 主题的网格线

结语

我们介绍了 plotplainplottig 这两个绘图主题。它们简单、方便、实用,不仅给使用者的画图提供了新的选择,而且解决了 Stata 默认绘图主题的中的一些缺陷。同时,我们也介绍了如何根据自己的需要,修改已有主题。希望大家都可以绘制出漂亮的图片!









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

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


往期推荐


软件应用 | 如何随机生成满足特定数据特征的新变量?

软件应用 | 用STATA做GMM估计:过程与代码

软件应用 | Stata 17的新功能(二):使用Wild Cluster Bootstrap估计DID的标准误

软件应用 | Stata 17的新功能(一):双重差分法(DID)的官方命令

软件应用 | 资料整理利器!Python 提取 PDF 指定内容生成新文件

推荐 | 邱泽奇:大数据给社会学研究带来了什么挑战?

软件应用 | 这款拓展让你的jupyter lab使用更高效







数据Seminar




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


推荐 | 郑泽青

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

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

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

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