在之前「使用 R 语言绘制历年中国各省市区县地图(小地图版本 + 长版)」课程的基础上,我们今天再来学习下如何绘制双变量填充地图,也同样包含两种版本:
![]()
小地图版本
在本课程中我们会讲解如何生成双变量色块图例的数据,但是实际上大家之后绘图的时候并不用每次都生成,而是直接读取附件中生成好的 shp 文件即可。
首先加载所需 R 包,读取地图数据和瞪羚数据:
library(tidyverse) |
citymap 的坐标范围是这样的:
citymap %>% |
后面的图例位置就是根据这个范围尝试出来的。
这里我们以 4x4 的双变量填充地图为例,使用下面的代码即可得到所有的 16 种类别标签:
crossing(1:4, 1:4) %>% |
然后就可以构建数据框了:
tibble( |
这里面的 15 种渐变色是使用这个网页应用生成的:https://observablehq.com/@czxa/bivariate-choropleth-color-generator
![]()
该应用可以生成 2~20 阶的双变量填充颜色,并且颜色可以自定义。
然后我们需要生成一个 4x4 的 multipolygon 类的 sf 对象,这里我是先创建的栅格数据,然后再把栅格数据转换成 sf 对象。
首先看一下直接转换得到的结果:
x0 <- -2525586 |
![]()
这样的结果并不是我们想要的,应该把这个图例逆时针旋转 90 度才对,所以我们需要改变下 polygon 的顺序,注意到现在色块现在的编号顺序是 1-16,如果逆时针旋转 90 度,对应的编号应该是 4、8、12、16、3、7、11、15、2、6、10、14、1、5、9、13。我们可以通过编程生成这样的编号顺序的:
matrix(1:16, nrow = 4, byrow = T) %>% |
![]()
这样的结果就正确了。
另外我们还需要给图例的标签生成位置数据:
# 标签的位置 |
为了绘制双变量填充地图,我们需要准备两个连续变量,这里我们统计每个城市的瞪羚企业和其他企业的数量:
# 统计每个城市的瞪羚企业数量和独角兽企业数量 |
然后再把每个变量分成四组,这里使用分位数进行分组:
# 计算两个变量的分位数 |
然后再和地图数据以及 bi—scale 数据匹配:
citymap %>% |
label 数据也需要根据自己的需要设置下:
labeldf %>% |
然后就可以绘图了:
ggplot(citymap2) + |
![]()
最后为了方便使用,保存为 shp 文件,然后 label 数据也保存成了 xlsx 文件,这样大家之后直接读取就可以使用了:
# 保存结果 |
附件中还提供了 2x2、3x3、5x5、8x8 的生成方法和结果。
长版地图
方法类似:
library(tidyverse) |
![]()
# 标签的位置 |
![]()
# 保存结果 |
同样,附件中也提供了其他阶数的结果。
更多关于地图绘制的内容可以学习下平台上的系列课程「使用 R 语言进行地理计算」。
点击这里跳转到 RStata 短书平台获取附件:使用 R 语言绘制双变量填充中国地图(插件方法)
评论