之前从 GitHub 上看到过不少类似的图表,就想着其实也可以绘制一副中国的。本次课程我们就以之前讲解的「使用 R 语言绘制中国省级地图」课程中的数据为底图来绘制:
![]()
通常大家会喜欢把柱状图放到地图的右边,不过因为国内地图的审图要求不能存在压盖南海诸岛的问题,所以我把柱状图调整到了左边。
使用的数据是 2020年中国各省市地区生产总值.csv,地图数据我们使用的是 2020 年中国行政区划。
首先加载所需的 R 包:
library(ggspatial) |
ggbump 提供 geom_sigmoid() 图层,用以绘制 S 形连接线;BBmisc 包提供 normalsize() 函数,用以对数据进行变换,本案例中使用的是 range 方法,用以把数据尺度变换到到指定范围内。
在之前的课程中我们介绍了使用 showtext 包设置字体的方法:
# 设定 ggplot2 绘图主题 |
读取 2020 年中国省级行政区划:
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" |
直接绘制出来的地图会是这个样子的:
ggplot() + |
![]()
这个地图的坐标范围是:
st_bbox(prov) |
等下我们就会根据这个范围来构造用于绘制柱状图的辅助数据集。
读取 GDP 数据并与地图数据合并(使用省份的前两个字):
# GDP 数据 |
构造辅助数据集:
prov$地区生产总值 -> gdp |
通过下面的绘图过程,大家就会明白其中每个变量的用处和构造方法:
library(ggnewscale) |
首先绘制基础的省份填充地图:
ggplot() + |
![]()
绘制从地图到柱状图的 S 形连接线:
p1 + geom_sigmoid(data = ranking, |
![]()
柱状图(使用 geom_segment 绘制):
p2 + geom_segment(data = ranking, |
![]()
绘制 y 轴分割线:
p3 + geom_segment(data = ranking, |
![]()
添加地图上的散点:
p4 + geom_point(data = ranking, |
![]()
添加省份标签:
p5 + geom_text(data = ranking, |
![]()
添加值标签:
p6 + |
![]()
其他设置:
p7 + |
![]()
完整代码为:
ggplot() + |
如果需要添加指北针和比例尺,可以使用:
p + |
![]()
点击这里跳转到 RStata 短书平台获取附件:使用 R 语言绘图展示 2020 年中国各省市地区生产总值(地图 + 柱状图)
评论