R语言-数据分析(第2期)如何在时空尺度展示各省份的兴趣数据?

Posted 学术无界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言-数据分析(第2期)如何在时空尺度展示各省份的兴趣数据?相关的知识,希望对你有一定的参考价值。




目录


0.问题导入

1.示例数据

2.导入示例数据

3.计算各省人口时间MMK趋势值

4.将四省shp文件合并为一个shp文件

5.将合并后的shp文件转为绘图用的data.frame

6.给各省shp添加MMK趋势值属性

7.绘制各省2000-2018年人口演进趋势值空间分布图(图1)

8.绘制各省2000-2018年人口堆叠时间演进子图(图2)

9.空间图与统计子图拼接(图3)

10.总结

11.本篇所使用的R-packages(没有的需要通过install.packages('')进行安装

0. 问题导入

在我们日常处理地理数据过程中,我们不只单单需要对栅格文件进行空间绘图。同样地,我们也需要根据省份的位置信息对各省的兴趣数据进行空间展示?那么,具体应该怎么实现呢?
本篇以“安徽、江苏、浙江及上海四省市2000-2018年人口MMK趋势值的空间尺度展示”为例,具体给出解决方案~

1. 示例数据

数据获取:关注学术无界回复“R数据第二期”


需要根据setwd( )设置默认路径至20200103文件夹下。


setwd('/Users/jerseyshen/Documents/JianShu_Project/20200103')

2. 导入示例数据

2.1 合并并导入四省示例人口数据(csv)
pop_list = as.list(list.files('data/',full.names = T))
pop_read = lapply(pop_list, fread)

predel_data <-function(x){
x = x[,-c(1:2)]
x = apply(x, 1, rev)
colnames(x) = c('total','urban','rural')
rownames(x) = paste0('year',2000:2018)
return(x)
}
pop_reframe = lapply(pop_read,predel_data)

pl_bar_df = data.frame(
Date = 2000:2018,
Anhui = pop_reframe[[1]][,1],
JiangShu = pop_reframe[[2]][,1],
Shanghai = pop_reframe[[3]][,1],
Zhejiang = pop_reframe[[4]][,1]
)
pl_bar_m = melt(pl_bar_df,'Date')
2.2 合并并导入四省示例shp文件
library(sf)
shp_file = as.list(list.files('shp/',pattern = '.shp$',
full.names = T))
shp_list = lapply(shp_file, shapefile)

shp_bind = do.call(bind,shp_list)

3. 计算各省人口时间MMK趋势值

mk_df = pl_bar_df[,-1]
mk_df = as.matrix(mk_df)
source('~/Documents/JianShu_Project/20191209/mmkTrend.R')

mk_cal <- function(x){
temp_mk = mmkTrend(x)$Zc
return(temp_mk)
}
mk_v = apply(mk_df, 2,mk_cal)

4. 将四省shp文件合并为一个shp文件

shapefile(shp_bind,'roi2.shp')
shp_m = shapefile('roi2.shp')

5. 将合并后的shp文件转为绘图用的data.frame

shp_df = fortify(shp_m)

6. 给各省shp添加MMK趋势值属性

g1 = which(shp_df$id == 0)
g2 = which(shp_df$id == 1)
g3 = which(shp_df$id == 2)
g4 = which(shp_df$id == 3)

shp_df$MK = mk_v[1]
shp_df$MK[g2] = mk_v[2]
shp_df$MK[g3] = mk_v[3]
shp_df$MK[g4] = mk_v[4]

7. 绘制各省2000-2018年人口演进趋势值空间分布图(图1)

mycolor = colorRampPalette(brewer.pal(11,'RdYlBu'))(4)

p1 = ggplot()+
geom_polygon(data = shp_df,aes(x = long,y = lat,group = group,fill = MK),
color = 'white')+
scale_fill_gradientn(colours = mycolor)+
coord_fixed(1.3)+
theme_nothing()+
theme(legend.position = 'bottom',
legend.key.width = unit(1.3,'cm'),
legend.text = element_text(face='bold',colour='black',size=12,hjust=.5),
legend.title = element_text(face='bold',colour='black',size=12,hjust=.5))
png('plot1.png',
height = 10,
width = 10,
units = 'cm',
res = 800)
print(p1)
dev.off()

【R语言-数据分析(第2期)】如何在时空尺度展示各省份的兴趣数据?

图1 各省2000-2018年人口演进趋势值空间分布图

在完成图1绘制,本篇的第一个小目标就完成了。但是呢,是不是还缺点什么?
是的,单纯基于MMK趋势值,我们智能看到浙江,江苏,上海与安徽四省市在2000年-2018年间压缩后的一个趋势,期间每年具体的人口数我们无法获取信息。
因此,本篇第二个目标就是增加绘制各省2000-2018年人口的时间演进图,并与空间图进行拼接。

8. 绘制各省2000-2018年人口堆叠时间演进子图(图2)

pl_bar_m$variable = factor(pl_bar_m$variable,
levels = c('Shanghai',
'Zhejiang',
'Anhui','JiangShu'))
p2 = ggplot()+
geom_bar(data = pl_bar_m,
aes(x = Date, y = value, fill = variable),
stat = 'identity',
position = 'dodge',
width = 0.5)+
theme_bw()+
theme(
legend.position = 'top',
axis.text = element_text(face='bold',colour='black',size=12,hjust=.5),
axis.title = element_text(face='bold',colour='black',size=12,hjust=.5),
legend.text = element_text(face='bold',colour='black',size=12,hjust=.5),
legend.title = element_blank(),
legend.direction = c('horizontal')
)+
guides(fill = guide_legend(nrow = 1))+
xlab('Date')+
ylab('Population')+
facet_wrap(~variable,nrow = 4,scales = 'free_y')
png('plot2.png',
height = 10,
width = 10,
units = 'cm',
res = 800)
print(p2)
dev.off()

【R语言-数据分析(第2期)】如何在时空尺度展示各省份的兴趣数据?

图2 各省2000-2018年人口堆叠时间演进子图

9. 空间图与统计子图拼接(图3)

说说为啥不用facet, 因为两幅图均存在fill 属性,时间统计的fill 是离散的,对应各个省份;空间图fill属性是连续的,对应各省份的MMK趋势值。如果通过facet_wrap 进行拼接,则会出现报错。因此,本篇采用plot_grid 函数将两图进行拼接。

图3 空间图与统计子图拼接

10. 总结

本篇共解决了以下两个问题:


1. 如何不同于栅格数据,在R中绘制省级单位尺度特定属性的空间分布图?
2. 如何在统计图与空间图均存在fill 属性时,在R中将统计图与空间图进行拼接?


11. 本篇所使用的R-packages(没有的需要通过install.packages('')进行安装)

library(data.table)
library(ggplot2)
library(maptools)
library(raster)
library(dplyr)
library(reshape2)
library(cowplot)
library(RColorBrewer)
library(ggmap)

资源仅供学术交流使用,不得用于商业用途!

如有侵权,请联系小编微信wangxueransea

推文期数:2020013

素材来源:简书用户TroyShen(作者微信:troyshen123)

责任编辑:王雪然 曾要忠

推文审核:骆丹云 林晓峰

总审核:学术无界顾问团

下期预告:

往期回顾:





以上是关于R语言-数据分析(第2期)如何在时空尺度展示各省份的兴趣数据?的主要内容,如果未能解决你的问题,请参考以下文章

作业展示第一期R语言循环命令实现NHANES数据批量下载!

学术成果第2期 | 一种基于Apache Spark的时空Ripley’s K函数优化与加速方法

eCharts动态加载各省份的数据

全国第7期R语言数据分析实战技术学习班

R语言问题剖析20篇-什么是时空数据分析?意义目标模型

Python程序设计《集美大学各省成绩分析》