最近找到了一份欧洲各国领导人数据(详见附件),如何生动形象的展示各国领导人的在任时间情况呢?今天就让我们一起来使用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 绘图展示欧洲各国领导人在任时间
评论