*- 把 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 *- 删除比例尺和指北针 dropifinlist(class, "指北针_多边形", "比例尺_多边形", "区域边界") save afmap_db.dta, replace
再创建比例尺和指北针的多边形数据:
use afmap_coord.dta, clear *- 保留指北针和比例尺对应的观测值 keepifinlist(_ID, 55, 56) gen value = 1 save afmap_polyon, replace
再对线条进行分组:
*- 线条 use afmap_line_db.dta, clear *- 分组 dropin 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 mergem:1 _ID using temp keepif _m == 3 drop _m save afmap_line_coord, replace
这里我把线条分为两类:
指北针和比例尺的线条
非洲总区域边界
后面的代码中也会根据不同的线条类型使用不同的颜色和粗细。
标签数据也需要处理下:
use labeldf.dta, clear encodeclass, gen(classnum) save labeldf2, replace codebook classnum
然后就可以绘制地图了:
use afmap_db.dta, clear ren sov_a3 iso3 merge 1:1 iso3 using 2022年各国夜间灯光亮度.dta dropif _m == 2 drop _m
评论