r语言worldclim数据_R语言空间数据分析(五):栅格数据处理
作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。HopeR:R语言空间数据分析(零):总目录zhuanlan.zhihu.com
本帖子会简单介绍如何读入并处理栅格数据。首先,我们会用到一个矢量数据,数据来自:https://gadm.org/download_country_v3.html,用到的是澳洲的地图。读取方法如下:
# 获得数据的方法之一
# wget --no-check-certificate https://biogeo.ucdavis.edu/data/gadm3.6/gpkg/gadm36_AUS_gpkg.zip
library(pacman)
p_load(sf,raster,tidyverse)
# 查看有哪些图层
st_layers(
"data/gadm36_AUS.gpkg"
)
# 读取特定图层
Ausoutline
layer='gadm36_AUS_0')
可以对这个数据集进行观察:
# 观察
print(Ausoutline)
# 查看proj4坐标系
st_crs(Ausoutline)$proj4string
plot(Ausoutline)
然后,让我们读入栅格数据,这是一个全球平均气温数据,来源于:Historical climate data(tavg 5m)。
# 读入栅格数据
jan
# have a look at the raster layer jan
jan
plot(jan)
我们可以改变它的坐标系,然后再次绘图:
# set the proj 4 to a new object
newproj
# get the jan raster and give it the new proj4
pr1 %
projectRaster(., crs=newproj)
plot(pr1)
下面,让我们一次性读入所有栅格数据:
# 一次性读入所有栅格数据
dir("data/wc2.1_5m_tavg",full.names = T) %>%
stack() -> worldclimtemp
worldclimtemp
让我们为每一个图层命名,它其实是每个月的平均温度,因此可以用月份命名:
month
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
names(worldclimtemp)
如果想取出一月份的数据,有两种方法:
worldclimtemp[[1]]
worldclimtemp$Jan
下面,让我们提取特定城市的数据,这是通过经纬度来提取的:
## 提取特定城市的数据
site
"Bunbury", "Cairns", "Adelaide", "Gold Coast", "Canberra", "Newcastle",
"Wollongong", "Logan City" )
lon
138.6, 153.43, 149.13, 151.78, 150.89, 153.12)
lat
-34.93, -28, -35.28, -32.93, -34.42, -27.64)
#Put all of this inforamtion into one list
samples
samples
# Extract the data from the Rasterstack for all points
AUcitytemp" />
提取的变量是一个矩阵,可以稍微进行转化,把城市名称也加上。
AUcitytemp
Aucitytemp2 %
as_tibble()%>%
add_column(Site = site, .before = "Jan")
Aucitytemp2
现在,我们要从世界气温图中取出澳洲的部分,实现如下(利用crop函数):
Austemp %
# now crop our temp data to the extent
crop(worldclimtemp,.)
# plot the output
plot(Austemp)
这个图中还包括了非澳洲的部分,如果只想要澳洲的部分,可以这样操作:
exactAus %
mask(Ausoutline, na.rm=TRUE)
plot(exactAus)
可以尝试对三月份的数据做一个温度分布直方图:
exactAusdf %
as.data.frame()
# set up the basic histogram
gghist
aes(x=Mar)) +
geom_histogram(color="black",
fill="white")+
labs(title="Ggplot2 histogram of Australian March temperatures",
x="Temperature",
y="Frequency")
# add a vertical line to the hisogram showing mean tempearture
gghist + geom_vline(aes(xintercept=mean(Mar,
na.rm=TRUE)),
color="blue",
linetype="dashed",
size=1)+
theme(plot.title = element_text(hjust = 0.5))
最后,我们会演示一下空间插值的过程。首先,我们来合并气温的时空分布数据:
samplestemp%
cbind(samples)
samplestemp
而后,让我们把它转换为空间信息数据框,这里需要声明经纬所在列,以及坐标系(这里定义为4326,也就是WGS 84):
samplestemp%
st_as_sf(.,coords = c("lon", "lat"),
crs =4326,
agr = "constant")
samplestemp
这里我们可以对澳大利亚轮廓图和城市分布进行可视化:
plot(Ausoutline$geom)
plot(st_geometry(samplestemp), add=TRUE)
插值之前,让我们先统一坐标系,然后转换为SP对象:
samplestemp %
st_transform(3112)
Ausoutline %
st_transform(3112)
samplestempSP %
as(., 'Spatial')
AusoutlineSP %
as(., 'Spatial')
现在意味着,我们要用手头若干个城市的数值,来对整个澳大利亚的气温空间分布进行插值。我们需要创建一个要插值的空间范围:
emptygrd
names(emptygrd)
coordinates(emptygrd)
gridded(emptygrd)
fullgrid(emptygrd)
# Add the projection to the grid
proj4string(emptygrd)
然后进行插值:
p_load(gstat)
# Interpolate the grid cells using a power value of 2
interpolate
这里用的IDW算法来插值,只使用1月份的数据。idp参数越大,则随着距离的增大,数值减少越大。如果idp为0,那么随着距离加大,依然不会有任何数值衰减。关于方法细节,可参考:How inverse distance weighted interpolation works。最后,我们看一下插值之后的结果:
# Convert output to raster object
ras
# Clip the raster to Australia outline
rasmask
# Plot the raster
plot(rasmask)
参考资料:
r语言worldclim数据_R语言空间数据分析(五):栅格数据处理相关推荐
- mysql设置语言变量_Mysql语言之数据操作语言
DML语言:数据操作语言 插入:insert 修改:update 删除:delete 一.插入语句: /* 语法: insert into 表名(列名...) values(值1,...); */ # ...
- r语言 list添加_R语言里面双层list变成长形数据框
绘图需求最大的难关往往是数据整理,比如下面的双层list : set.seed(123456)gs=list(tmp1=list(g1=sample(1000,abs(floor(100*rnorm( ...
- r语言中mpg数据_R语言数据筛选整理包dplyr
dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...
- r语言清除变量_R语言(1)初识与数据结构
点击上方蓝字,记得关注我们! a picture is worth a thousand words! 一,R语言简介 1,R语言的发展 上世纪90年代初,新西兰奥克兰大学 Ross Ihaka 和 ...
- r语言electricity数据集_R语言实战学习
<R语言实战>中文电子版 提取码:lx35 已经学习打卡R语言22天了,可以说是初窥真容--基本了解R的数据和函数:作为程序语言,就是要多练习,多领悟,在实战中发现问题并解决问题. 所以, ...
- r语言折线图_R语言基础入门视频教程——语法篇(完结)
这个视频分了2个阶段录制的,第1阶段有10章的内容,在文章:生物专业学生0基础入门R语言语法视频教程,就有说明,后面把最后2章补录完成啦,也算是一个结局啦.下面是目录: 第01章:R语言简介(免费) ...
- r - 求平均成绩_R语言 从零开始的笔记(一)
R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R语言于生物学分析中的应用越来越广泛,在其他领域的统计绘图应用 ...
- R语言JAVA对比_R语言统计分析应用与SAS、SPSS的比较
能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语言,Matlab,S-PLUS,S-Miner等.下面我们来看一下各应用的特点: SPSS: 最简单的,都是菜单操作 ...
- sql语言学习——数据定义语言
数据定义语言:库和表的管理. 库的管理:创建.修改.删除 表的管理:创建.修改.删除 创建:create 修改:alter 删除:drop 查看表的结构:DESC 表名; 查看库中的表:SHOW TA ...
最新文章
- Debian/Ubuntu/Raspbian 时间同步
- ios微信支付失败 php,iOS 微信支付疑难杂症。
- 微擎css使用php变量,$_Wamp;全局变量
- EventFlow.helper.js 事件流程控制
- 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
- 教你一招:让集群慢节点无处可藏
- RVC使用指南(二)-集群管理
- NotePad++ 调试PHP代码中文显示乱码
- UDS - 诊断协议和协议栈介绍
- linux 执行文件命令
- 第十一届 蓝桥杯 省 模拟赛 试题+题解 C/C++描述
- 互联网+对酒店IPTV电视系统的影响
- 无人机倾斜摄影测量技术有哪些特点?
- 史上最强最逼真的游戏
- 八数码 问题 BFS+Cantor
- Linux系统怎么复制文件夹下的全部文件到另外文件夹?
- React-Redux使用方法
- 【Puppeteer】基于Puppeteer采集网页图片资源
- 玩转树莓派---详解树莓派的系统烧录,基础使用及基于树莓派制作手势控制的小车(附详细代码及演示效果)
- 面试官问你:“什么是NoSQL“