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. 问题导入
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()
图1 各省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()
图2 各省2000-2018年人口堆叠时间演进子图
9. 空间图与统计子图拼接(图3)
图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期)如何在时空尺度展示各省份的兴趣数据?的主要内容,如果未能解决你的问题,请参考以下文章