之前也给大家分享过类似的课程,不过感觉方法不够范式,最近终于开发出了一套范式的方法,使用该方法可以非常轻松的绘制历年的中国各省市区县的地图。附件中我提供了 1949~2021 年每年的省市区县地图数据,包含 mini 和 long 两套:
![]()
今天的课程中我们将一起学习这两套数据的使用。
数据介绍
该套绘图数据是经过预先编辑的(添加了秦岭淮河线、胡焕庸线等元素)。在之前的课程「使用 R 语言操作地理矢量数据、使用 Stata 绘制精美地图」(可以从平台上搜索下)中我向大家介绍过这种使用 R 语言进行地理矢量数据编辑的方法。
附件中提供了三个文件夹:
- provmapdata
- citymapdata
- countymapdata
每个文件夹中都包含了 longshp 和 minishp 两个文件夹,这两个文件夹下面又分别包含了 1949~2021 年每年的省市区县地图数据,long 表示长版,mini 表示小地图版本。
每份数据又包含两种 shp 数据,例如 1992 年 long 版本的:
- chinaprov1992long_line:线条元素,例如省界、国界线、九段线、海岸线、秦岭淮河线、胡焕庸线等。
- chinaprov1992long:多边形元素,也就是各省的区域范围。
小地图版本
1. 在地图上添加散点图
首先加载所需的 R 包:
library(tidyverse) |
中国地图通常使用这样的坐标系:
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" |
读取小地图版本的中国省级地图:
# 读取小地图版本的中国省级地图 |
在地图上添加散点图,这里以瞪羚企业分布为例:
readxl::read_xlsx("瞪羚、独角兽、创新型企业经纬度数据.xlsx") %>% |
转换成 sf 对象:
pointdf %>% |
再绘制小地图版本的中国的中国地图的时候,我们也需要给南海九段线小地图里面添加上相应的散点,下面演示了如何提取小地图范围的散点并把它们平移到恰当的位置:
小地图的坐标范围是这个:
small_bbox <- st_bbox(c(xmin = 120000, |
提取这个范围的点:
pointdfsf %>% |
把这些点移动到小地图的位置:
pointdfsf_small %>% |
合并两部分:
bind_rows(pointdfsf, pointdfsf_small) -> pointdfsfall |
然后就可以绘图了:
代码里面用到的 cnfont 是预先配置的字体,可以学习平台上的系列课程「R 语言数据科学」第一课时了解如何配置。
library(ggspatial) |
![]()
2. 绘制填充地图
下面我们再计算各城市的瞪羚企业数量,虽然绘制市级地图,但是我们仍然使用省级的线条(突出省份区域):
# 读取 2021 年城市地图 |
统计每个城市的公司数量:
pointdf %>% |
和地图数据合并:
citymap %>% |
然后就可以绘图了:
citymap2 %>% |
![]()
使用连续变量绘制填充地图的时候,默认情况下会使用渐变色,我们也可以先把连续变量切分成分类变量(这里是有序因子变量)再绘图:
# 使用分段填色 |
![]()
3. 使用栅格数据绘制地图
使用栅格数据绘制地图的场景也很常见,首先我们看一下高分辨率的数据如何绘图。
高分辨率的栅格数据可以先转换成密集的散点数据:
library(raster) |
然后绘图方法就和散点图一样了:
cn2022points %>% |
![]()
如果是低分辨率的栅格数据,使用上面的方法就不太好看了,可以考虑转换成 polygon 绘图:
# 低分辨率 |
![]()
长版地图
长版地图数据的使用更简单,这里仅仅演示如何在地图上添加散点图:
# 读取小地图版本的中国省级地图 |
![]()
更多关于地图绘制的内容可以学习下平台上的系列课程「使用 R 语言进行地理计算」。
点击这里跳转到 RStata 短书平台获取附件:使用 R 语言绘制历年中国省市区县地图(小地图版本+长版)
评论