Stata 绘图展示欧洲各国领导人在任时间

最近找到了一份欧洲各国领导人数据(详见附件),如何生动形象的展示各国领导人的在任时间情况呢?今天就让我们一起来使用Stata进行绘图展示:

整理数据

首先加载 data.tsv 数据,里面是欧洲各国领导人数据:

import delimited using "data.tsv", clear

生成数值型变量(上任时间、卸任时间、在任时间),并保留需要的变量:

drop v8
gen eindate = date(startdate, "YMD")
gen eoutdate = date(enddate, "YMD")
keep leader eindate eoutdate exitgender
replace eoutdate = mdy(1, 13, 2022) if missing(eoutdate)
gen gap = (eoutdate - eindate) / 365

我们想将各国领导人的上任时间与卸任时间进行连线,其跨度大小可以直白展示领导人的在任时间,所以我们需要生成线条的起点与终点坐标,并把日期格式化为年格式:

* 生成起点与终点坐标
gen x0 = eindate
gen y0 = 0
gen x1 = eoutdate
gen y1 = gap

* 日期格式化
format x0 %tdCY
format x1 %tdCY

将领导人划分为四种类型,以分类展示领导人信息:

tab exitgender
gen type = ""
replace type = "卸任的男性领导人" if exitgender == "Irregular-M"
replace type = "卸任的男性领导人" if exitgender == "Natural Death-"
replace type = "卸任的男性领导人" if exitgender == "Regular-"
replace type = "卸任的女性领导人" if exitgender == "Regular-F"
replace type = "卸任的男性领导人" if exitgender == "Regular-M"
replace type = "卸任的男性领导人" if exitgender == "Retired Due to Ill Health-M"
replace type = "在职的男性领导人" if exitgender == "Still in Office-"
replace type = "在职的女性领导人" if exitgender == "Still in Office-F"
replace type = "在职的男性领导人" if exitgender == "Still in Office-M"

我们想在图中添加文本标签,因而生成 x2 变量用于调整文本标签时作为 x 轴的变量(不支持 x1,因为 x1 是日期格式的变量)。

gen x2 = x1
drop if missing(x1)
save mydata, replace

为了避免文本标签重叠,可以使用 https://czxb.shinyapps.io/repeltext/ 调整文本标签间距。这部分内容可以参考课程:

×

绘图展示

整理好数据之后,就可以进行绘图展示了。

tw pcspike y0 x0 y1 x1 if type == "卸任的女性领导人", lc("191 136 159%70") || ///
sc y1 x1 if type == "卸任的女性领导人", m(o) mc("191 136 159%70") || ///
pcspike y0 x0 y1 x1 if type == "卸任的男性领导人", lc("196 196 196%70") || ///
sc y1 x1 if type == "卸任的男性领导人", m(o) mc("196 196 196%70") || ///
pcspike y0 x0 y1 x1 if type == "在职的女性领导人", lc("187 38 117") || ///
sc y1 x1 if type == "在职的女性领导人", m(o) mc("187 38 117") || ///
pcspike y0 x0 y1 x1 if type == "在职的男性领导人", lc("75 159 201") || ///
sc y1 x1 if type == "在职的男性领导人", m(o) mc("75 159 201") ///
xsc(range(`=mdy(1, 1, 1980)' `=mdy(1, 1, 2022)') fextend) ///
xla(`=mdy(1, 1, 1980)'(2190)`=mdy(1, 1, 2022)') ///
plotr(margin(zero)) ///
leg(order(8 "在职的男性领导人" 6 "在职的女性领导人" ///
4 "卸任的男性领导人" 2 "卸任的女性领导人") row(1) pos(11) size(*0.8)) ///
ti("欧洲各国领导人在任时间", size(*0.8)) || ///
sc y x if too_many_overlaps == 0, mlab(label) m(i) mlabc(black) ///
mlabpos(9) mlabsize(*0.8) ///
xti("上任/卸任时间", size(*0.8)) yti(, size(*0.8)) ///
caption("数据来源:Archigos database<https://rochester.edu/college/faculty/hgoemans/data.htm> & New York Times" "<https://www.nytimes.com/interactive/2017/09/24/world/europe/merkel-germany-election-twelve-years.html>" "绘制:微信公众号 RStata", size(*0.7)) xsize(16) ysize(20)
gr export "欧洲各国领导人在任时间.png", width(1600) replace
gr export "欧洲各国领导人在任时间.pdf", replace

这样我们需要的欧洲各国领导人在任时间图就绘制出来了:

点击这里跳转到 RStata 短书平台获取附件:Stata 绘图展示欧洲各国领导人在任时间

评论