今天给大家讲解下如何使用 Stata 绘制中国地图与世界地图的网络流向图的方法。
我准备了两个版本,一个是竖版:
![]()
另外一个是横版:
![]()
下面我们会以竖版的为例进行讲解。横版类似,感兴趣的小伙伴可以结合本课程自行学习。
本课程是在下面这些课程的基础上开展的,需要预先学习下面几个课程:
- 使用 Stata 绘制历年中国省级行政区划(小地图版本 + 长版):https://rstata.duanshu.com/#/brief/course/e194d75fe1674f7c8921daec1ece7f7d
- 使用 Stata 绘制历年中国市级行政区划(小地图版本 + 长版):https://rstata.duanshu.com/#/brief/course/0e9d78633ae64fefa684d6aad89633bc
- 使用 Stata 绘制历年中国县级行政区划(小地图版本 + 长版):https://rstata.duanshu.com/#/brief/course/99c2e97b88ea401bbdb8da4511341cc8
- 使用 Stata 绘制以太平洋为中心的世界地图(带指北针和比例尺):https://rstata.duanshu.com/#/brief/course/f995d70c54094c968611eeeb73b25d76
使用 R 语言创建中国地图 + 世界地图的矢量数据
这部分需要使用 R 语言,不过不会使用也没关系,可以直接跳过这个部分。后面如果有需要特别的地图数据,可以联系李老师定制。
首先加载所需的 R 包:
library(tidyverse) |
读取经过编辑后的世界地图:
read_sf("worldmap/worldmap.shp") -> worldmap |
注意这份世界地图的坐标系是“+proj=eck3 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs”。
再读取 aea 坐标系下的省级行政区划数据,这份数据来源上面的使用 Stata 绘制省级地图的课程里面:
mycrs <- "+proj=aea +lat_0=0 +lon_0=105 +lat_1=25 +lat_2=47 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs" |
直接合并两份地图数据,后面再在 Stata 中进行地图数据的调整。
# 合并 |
各国中心的坐标及各省的中心坐标经常会被用到,所以也保存下:
worldmap %>% |
这样就完成了 R 语言部分的内容,简单来说就是直接把两种数据堆起来保存成 shp 文件。
使用 Stata 进行地图数据的调整
下面我们再使用 Stata 进行地图数据的调整。
首先把 shp 文件转换成 dta 文件:
local name = "prov+worldmap_long" |
![]()
世界地图的比例尺和指北针使用 polygon 绘制:
use prov+worldmap_long_coord.dta, clear |
平移中国地图:
use prov+worldmap_long_db.dta, clear |
再次概览:
use prov+worldmap_long_db.dta, clear |
![]()
线条数据也要进行同步修改:
use prov+worldmap_long_line_db.dta, clear |
再次概览:
use prov+worldmap_long_db.dta, clear |
![]()
5000km 和 N 向上移动一些:
use worldmap_label2, clear |
这样就调整好了。
处理绘图数据
这里我们使用 2006年海关进出口数据汇总结果.dta 演示。
首先我们需要获取每个消费地或生产地的经纬度,可以使用地理编码:
这部分内容可以详细学习:
使用 Stata 进行地理编码:地址解析经纬度、坐标转换 & 根据经纬度判断所处的省市区县:https://rstata.duanshu.com/#/brief/course/537300af1a9947edb758789785c600f3
use 2006年海关进出口数据汇总结果.dta, clear |
起运国或目的国的经纬度就没办法使用地理编码获取了,只能先和 worldmap_label2.dta 匹配,匹配不上的再一一手动调整:
*- 起运国或目的国的经纬度 |
然后就可以把坐标都匹配上,然后处理成所需要的样子了:
use 2006年海关进出口数据汇总结果.dta, clear |
![]()
这就是 arrowdata 需要的样子。
然后就可以绘制地图+网络图了:
* 绘制地图 |
![]()
进口数据绘制方法类似:
*- 再处理进口的 |
![]()
也可以把两幅图合并起来:
use prov+worldmap_long_db.dta, clear |
![]()
这样就解决了这个问题。
中国市级地图 + 世界地图、县级地图 + 世界地图的绘制方法也类似。
点击这里跳转到 RStata 短书平台获取附件:使用 Stata 绘制中国地图与世界地图的网络流向图
评论