使用 ggplot2 绘制比较各省份及其区县的详细数据

简介: 使用 ggplot2 绘制比较各省份及其区县的详细数据

简介

赵小编之前介绍过完整中国,及区域地图的画法。如:使用 ggplot2 绘制单个和多个省份地图R 语言绘制十段线地图,给特定省份填色;今天小编将介绍如何比较各个省份及其区县的详细数据,本文参考《R 语言数据可视化之美》[1]

导入 R 包

安装并加载所需的 R 包:

library(rgdal)   
library(ggplot2)
library(dplyr)
library(grid)
library(RColorBrewer)

数据处理

这里需要用到包含县级信息的 BOUNT_poly.shp 文件,并利用 readOGR()函数来读取。

该文件可以在 GitHub[2] 中可以下载。

dataProjected <- readOGR("China_adm_shp/bou4_4m/BOUNT_poly.shp") 
dataProjected@data$id <- rownames(dataProjected@data)

利用fortify()函数将对象转化为数据框形式,以便后续使用。

watershedPoints <- fortify(dataProjected)
df_China4 <- merge(watershedPoints, dataProjected@data, by = "id")

字段 ADCODE99 是行政区域代码,前两位表示所属的省。利用 substr() 函数将其取出,并存储在 province 变量中。

df_China4$province<-substr(as.character(df_China4$ADCODE99),1,2)

各县级的实际数据,由于没有真实数据,本文采用了随机数。读者可以使用自己的数据进行替换。数据形式如下:



##字段 NAME99 是各个县的中文名。
mydata<-data.frame(NAME99=unique(df_China4$NAME99),
                   value=round(runif(length(unique(df_China4$NAME99)),0,10)))
df_China<-full_join(df_China4,mydata)

由于 df_China$province 保存的是各省份的编号,为了更直观地展示信息,将各编号替换为省份名称。

# ProCode文件包含省份编号和名称
ProCode <- read.csv("PcCode.csv") 
ProCode$ID<-as.character(ProCode$ID)
for (i in 1:nrow(ProCode)){
  df_China$province<- gsub(pattern = ProCode$ID[i], x = df_China$province,replacement =ProCode$PcCode[i])
}
df_China$province<-factor(df_China$province,levels=as.character(ProCode$PcCode))

图形绘制

使用 ggplotfacet_wrap()分面函数来完成图形绘制。

df_China <- na.omit(df_China)
ggplot(df_China, aes(x = long, y = lat,group=group,fill=value)) +
  geom_polygon(colour="black",size=0.1) +
  scale_fill_gradientn(colours=brewer.pal(9,"Spectral")) +
  facet_wrap(~province, ncol = 7,scales="free",strip.position = "top")+
  coord_cartesian()+
  theme_void()+
  theme(strip.background = element_rect(color="grey60",size=0.25),
        panel.background = element_rect(fill=NA,color="grey60",size=0.25))



由于南海地区维度跨度太大,不便于数据展示,可对其进行调整。添加下列语句:

df_China<-df_China[df_China$NAME99!='南沙群岛' &
                     df_China$NAME99!='西沙群岛' &
                     df_China$NAME99!='中沙群岛' &
                     df_China$NAME99!='中沙群岛的岛礁及其海域', ]
ggplot(df_China, aes(x = long, y = lat,group=group,fill=value)) +
  geom_polygon(colour="black",size=0.1) +
  scale_fill_gradientn(colours=brewer.pal(9,"Spectral")) +
  facet_wrap(~province, ncol = 7,scales="free",strip.position = "top")+
  coord_cartesian()+
  theme_void()+
  theme(strip.background = element_rect(color="grey60",size=0.25),
        panel.background = element_rect(fill=NA,color="grey60",size=0.25))


如果只想展示部分省份,可以添加下列语句:

df_China <- df_China[df_China$province == c('上海市','浙江省','江苏省','安徽省') ,]
ggplot(df_China, aes(x = long, y = lat,group=group,fill=value)) +
  geom_polygon(colour="black",size=0.1) +
  scale_fill_gradientn(colours=brewer.pal(9,"Spectral")) +
  facet_wrap(~province, ncol = 7,scales="free",strip.position = "top")+
  coord_cartesian()+
  theme_void()+
  theme(strip.background = element_rect(color="grey60",size=0.25),
        panel.background = element_rect(fill=NA,color="grey60",size=0.25))


参考资料

[1]

《R 语言数据可视化之美》: https://github.com/EasyChart/Beautiful-Visualization-with-R

[2]

GitHub: https://github.com/EasyChart/Beautiful-Visualization-with-R/tree/master/%E7%AC%AC11%E7%AB%A0%20%E5%9C%B0%E7%90%86%E7%A9%BA%E9%97%B4%E5%9E%8B%E5%9B%BE%E8%A1%A8/%E4%B8%AD%E5%9B%BD%E5%9C%B0%E5%9B%BE%E5%9B%BE%E8%A1%A8%E7%B3%BB%E5%88%97/China_adm_shp/bou4_4m

目录
相关文章
|
定位技术
echart 全国地图 下钻省、市、区
echart 全国地图 下钻省、市、区
570 0
|
数据可视化 搜索推荐 JavaScript
数据可视化大屏百度地图区域掩膜MapMask实现地图指定区域非省市县行政区显示的实战案例解析(JavaScript API GL、个性化地图定制、指定区域经纬度拾取转化)
数据可视化大屏百度地图区域掩膜MapMask实现地图指定区域非省市县行政区显示的实战案例解析(JavaScript API GL、个性化地图定制、指定区域经纬度拾取转化)
938 0
|
2月前
Plotly:绘制2005-2021年各省份人均可支配收入
Plotly:绘制2005-2021年各省份人均可支配收入
33 1
|
2月前
|
Python
Plotly:制作2003-2021年各省份结婚登记数量动画
Plotly:制作2003-2021年各省份结婚登记数量动画
21 1
|
2月前
Plotly:制作2003-2021年各省份财政情况动画
Plotly:制作2003-2021年各省份财政情况动画
28 0
|
4月前
|
定位技术
eharts 中国地图添加城市(散点图实现,含获取城市坐标、图片转base64、自定义散点样式)
eharts 中国地图添加城市(散点图实现,含获取城市坐标、图片转base64、自定义散点样式)
307 9
|
3月前
|
JSON 数据可视化 定位技术
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
Map——使用BIGEMAP+geojson获取乡镇行政边界数据
171 0
|
5月前
|
JSON JavaScript 前端开发
Echarts地图实现:杭州市困难人数分布
使用ECharts实现杭州困难人数分布地图,结合地区与散点图,动态展示数据变化。支持进入下级区域并返回。预览包含动画效果。关键代码涉及地图初始化、数据加载及事件处理。需`hangzhou-map.json`数据文件。完整代码和资源见链接。
101 0
Echarts地图实现:杭州市困难人数分布
|
6月前
|
数据可视化 Serverless 定位技术
R语言ggmap空间可视化机动车碰撞–街道地图热力图
R语言ggmap空间可视化机动车碰撞–街道地图热力图
|
6月前
|
数据采集 数据处理
GEE图表——利用NOAA气象数据绘制气温预测图
GEE图表——利用NOAA气象数据绘制气温预测图
118 0