使用 Stata 绘制全世界所有国家以及部分国家的区划地图数据

注意,在 Stata15 上运行代码时,如果 spmap 运行出错,可以试一下把 spmap 换成 grmap 再运行一次。

昨天有个小伙伴问我有没有 Stata 绘制墨西哥的地图数据,我就想到是不是可以自动做好全球各国、各地区的地图数据(dta 格式的),这样大家需要的时候直接用就好。

于是我就准备了这个包含 454 份地图数据的大礼包分享给大家,数据涵盖全世界所有国家,以及部分国家的地区,数据爬取自:https://img.hcharts.cn/mapdata

这 454 份地图数据均由代码自动生成,每一份地图数据包含如下内容:

  • 1 个文件夹:里面有 shp 格式矢量数据;
  • 1 个 geojson 文件:从 Highmaps 网站上下载的原始数据;
  • 1 个 do 文件:Stata 使用该地图数据绘制地图的示例代码;
  • 4 个 dta 文件:Stata 绘制地图用的地图数据,两组,文件名中包含 line 的是线条数据,不包含 line 的是多边形数据。
  • 1 个 png 文件:Stata 绘制的效果预览,由于图片是自动生成的,所以比较粗糙。

为了方便大家使用,我已经把所有的 geojson 文件转成了 dta 格式的数据,同时提供了一份 Stata 示例代码,例如 欧洲 地图里面的 europe地图绘制方法.do 文件的内容为:

* europe 地图绘制方法:
* 欢迎关注微信公众号 RStata 获取更多 Stata 相关的学习资料和资源!
* 作者:微信 r_stata
* 注意:运行代码前请记得把工作目录设置为 europe_db.dta 文件所在的文件夹。
use "europe_db", clear
gen value = int(runiform(1, 84))
spmap value using europe_coord, id(ID) ///
fcolor("252 255 164" "252 181 25" "237 105 37" "187 55 84" ///
"120 28 109" "51 10 95") ///
ocolor("black" ...) ///
clmethod(custom) clbreaks(0 14 28 42 56 70 84) ///
graphr(margin(medlarge)) ///
caption("绘制:微信公众号 RStata", size(*0.8)) ///
osize(vvthin ...) ///
legend(size(*1.3) ///
order(2 "0~14" 3 "14~28" 4 "28~42" 5 "42~56" 6 "56~70" 7 "70~84") ///
ti(示例数据, size(*0.5) pos(11) color(black)) color(black)) ///
label(data(europe_db) x(x_centroid) y(y_centroid) l(name) color(gs10) size(*0.8 ...)) ///
line(data(europe_coord) size(*0.2 ...) color(black))
gr export "europe.png", replace

只要把工作目录切换至 europe_db.dta 文件所在的文件夹就可以运行上面的代码了,运行之后就可以得到这样的一张地图了:

注意事项

  1. 里面和中国相关的地图,包含所有的世界地图都是不准确的,请谨慎使用;
  2. geojson 格式的数据和 shp 格式的矢量数据都可以使用 GIS 软件编辑,因此即使你不使用 Stata,这份数据大礼包依然是非常有用的。

点击这里跳转到 RStata 短书平台获取附件:使用 Stata 绘制全世界所有国家以及部分国家的区划地图数据

评论