上一篇教程介绍了绘制完整地图的方法:R 语言绘制十段线地图,给特定省份填色,今天我们将继续探索分省市地图的绘制。
本文的所有代码以及数据可以在公众号后台回复 [
中国地图绘制
] 免费获得。如果需要往期部分推文代码,可去小编的 Github 获得。
数据准备
首先,加载所需 R 包,之后导入数据集,包含空间信息的 shp 文件。
library(rgdal) library(ggplot2) library(maptools) library(mapproj) library(ggsn) library(readxl) library(sf) show_data <- read_xlsx("城市数据.xlsx","hubei") shp_data <- st_read("CHN_adm/CHN_adm2.shp")
show_data 数据集
合并特定省份的数据
由于 show_data
中的城市名称是字符型,因此在合并数据之前,需要将 shp_data
中的城市名称转成字符型。然后,使用 left_join()
合并数据。
shp_data$NL_NAME_2 <- as.character(shp_data$NL_NAME_2) my_data <- dplyr::left_join(show_data, shp_data,by = c("city" = "NL_NAME_2"))
图形绘制
在省份地图上标记各个城市。
ggplot(data = my_data) + geom_sf(aes(fill = as.factor(value), geometry = `geometry`)) + geom_sf_text(aes(label = `city`,geometry = `geometry`), color = 'Black',size=2)+ xlab("Long (°E)") + ylab("Lat (°N)") + ##更改图形颜色,不加这个语句使用随机配色 scale_fill_manual( "value", values = c("#DFD3F2", "#00C2F9", "#FFF7D0"), breaks = c("A", "B", "C"), labels = c("A", "B", "C") )+ theme(legend.position = "top",panel.background = element_rect(fill = "white",color = "black"), panel.grid = element_line(color = "grey"))
绘制多个省份地图
有时候需要绘制一个区域的地图,比如:长三角、京津冀等,绘图方法和单个省份一样,只是需要将多个省份的数据存储在一个文件中。
合并数据
小编使用的是 xlsx 格式的数据,因为可以创建多个 sheet,调用起来比较方便。
hubei <- read_xlsx("测试数据.xlsx","hubei") jiangxi <- read_xlsx("测试数据.xlsx","jiangxi") all_province <- rbind(hubei,jiangxi)
绘图
数据处理好后,其他步骤和之前一样。
shp_data <- st_read("CHN_adm/CHN_adm2.shp") shp_data$NL_NAME_2 <- as.character(shp_data$NL_NAME_2) data2 <- dplyr::left_join(all_province, shp_data,by = c("city" = "NL_NAME_2")) ggplot(data = data2) + geom_sf(aes(fill = as.factor(value), geometry = `geometry`)) + geom_sf_text(aes(label = `city`,geometry = `geometry`), color = 'Black',size=2)+ xlab("Long (°E)") + ylab("Lat (°N)") + ##更改图形颜色,不加这个语句使用随机配色 scale_fill_manual( "value", values = c("#DFD3F2", "#00C2F9", "#FFF7D0"), breaks = c("A", "B", "C"), labels = c("A", "B", "C") )+ theme(legend.position = "top",panel.background = element_rect(fill = "white",color = "black"), panel.grid = element_line(color = "grey"))
小结
绘制地图的命令还是比较简单的,关键是得有 shp 文件。
本文的所有代码以及数据可以在公众号后台回复 [
中国地图绘制
] 免费获得。如果需要往期部分推文代码,可去小编的Github获得。