使用 Stata 绘制非洲各国地图

今天给大家分享一份使用 Stata 绘制非洲各国地图的数据和方法。

首先需要准备我特别设计的非洲各国地图数据(包含指北针和比例尺):

  • afmap 文件夹:地理矢量数据;
  • labeldf.dta 数据:文本标签位置数据;

这份数据是使用 R 语言设计的,感兴趣的小伙伴可以参考附件中的 main.R 文件。

下面我们看一下如何在 Stata 中绘制非洲各国地图。

首先把 shp 文件转换成 dta 文件:

*- 把 shp 文件转换成 dta 文件
local name = "afmap"
shp2dta using `name'/`name', database(`name'_db) coordinates(`name'_coord) genid(ID) gencentroids(centroids) replace
shp2dta using `name'/`name'_line, database(`name'_line_db) coordinates(`name'_line_coord) genid(ID) gencentroids(centroids) replace

这样就会得到四个文件:

  • afmap_db.dta
  • afmap_coord.dta
  • afmap_line_coord.dta
  • afmap_line_db.dta

其中前两个是底图的属性数据和坐标系数据,后面两个是线条的。

下面还需要对数据进行下调整。

首先是删除底图上的比例尺和指北针数据,因为这两个元素计划使用线条和多边形选项绘制:

use afmap_db.dta, clear
*- 删除比例尺和指北针
drop if inlist(class, "指北针_多边形", "比例尺_多边形", "区域边界")
save afmap_db.dta, replace

再创建比例尺和指北针的多边形数据:

use afmap_coord.dta, clear
*- 保留指北针和比例尺对应的观测值
keep if inlist(_ID, 55, 56)
gen value = 1
save afmap_polyon, replace

再对线条进行分组:

*- 线条
use afmap_line_db.dta, clear
*- 分组
drop in 1/54
keep ID class
gen group = 1
replace group = 2 in 5
*- group == 1 指北针和比例尺
*- group == 2 区域边界
ren ID _ID
save temp, replace

use afmap_line_coord.dta, clear
merge m:1 _ID using temp
keep if _m == 3
drop _m
save afmap_line_coord, replace

这里我把线条分为两类:

  1. 指北针和比例尺的线条
  2. 非洲总区域边界

后面的代码中也会根据不同的线条类型使用不同的颜色和粗细。

标签数据也需要处理下:

use labeldf.dta, clear
encode class, gen(classnum)
save labeldf2, replace
codebook classnum

然后就可以绘制地图了:

use afmap_db.dta, clear
ren sov_a3 iso3
merge 1:1 iso3 using 2022年各国夜间灯光亮度.dta
drop if _m == 2
drop _m

*- 缺失值替换成 -1
replace 均值 = -1 if mi(均值)

hist 均值
grmap 均值 using afmap_coord.dta, ///
id(ID) osize(vvvthin ...) ocolor(white ...) ///
clmethod(custom) clbreaks(-1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7) ///
fcolor("gs12" "25 25 0" "95 49 37" "176 71 70" "224 117 79" "235 171 83" "247 224 121" "255 255 204") ///
graphr(margin(medium)) ///
line(data(afmap_line_coord.dta) by(group) ///
size(*0.5 *1) pattern(solid ...) ///
color("black" black)) ///
polygon(data(afmap_polyon.dta) by(value) ///
osize(vvvthin ...) ocolor(black ...) ///
fcolor(black ...)) ///
label(data(labeldf2.dta) x(X) y(Y) ///
by(classnum) ///
color("gs12" "black" "black") ///
size(*0.8 *1 *1) ///
label(name) length(40 ...)) ///
ti("2022 年非洲各国平均夜间灯光亮度", size(*1)) ///
subti("数据处理&绘制:微信公众号 RStata,单位:nWcm-2sr-1", size(*1)) ///
caption("数据来源:An extended time-series (2000-2018) of global NPP-VIIRS-like nighttime light " " data-Harvard Dataverse< https://dataverse.harvard.edu/dataset.xhtml?pers" " istentId=doi:10.7910/DVN/YGIVCD>", size(*0.7)) ///
leg(order(2 "无数据" 3 "<=0.1" 4 "0.1~0.2" ///
5 "0.2~0.3" 6 "0.3~0.4" 7 "0.4~0.5" 8 "0.5~0.6" 9 ">0.6") ///
row(1) pos(6) ring(1))

点击这里跳转到 RStata 短书平台获取附件:使用 Stata 绘制非洲各国地图

评论