作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言高效数据处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
https://zhuanlan.zhihu.com/p/283199848zhuanlan.zhihu.com![23387a2a55f8fce640795eb1aa16c297.png](https://i-blog.csdnimg.cn/blog_migrate/71aa15fb925109efbf0cc2e2f4051f0c.jpeg)
EDA(Exploratory Data Analysis,探索性数据分析)是数据科学重要的一个环节,对于给定的栅格数据,我们要如何进行可视化呢?本帖子将会基于HopeR:R语言空间数据分析(八):栅格数据预处理中清洗好的数据,进行探索性数据分析。首先,我们把数据导入R环境中。这里,我们只对1到7共七个波段进行分析。
library(pacman)
p_load(sp,raster,rgeos,rgdal,rasterVis,raster,fs,sf,tidyverse)
dir("data/LC08_L1TP_203023_20190513_20190521_01_T1/mask",full.names = T) %>%
str_subset(pattern = "_B[1-7]_") %>%
stack() -> manc
在manc变量中,波段是按照1到7的顺序排列的,我们根据波段的光谱名称,给这些图层进行命名:
# Name the Bands based on where they sample the electromagentic spectrum
names(manc) <- c('ultra-blue', 'blue', 'green', 'red', 'NIR', 'SWIR1', 'SWIR2')
然后,我们可以对manc这个变量进行一些基本的探索:
crs(manc) # projection 坐标系
extent(manc) # extent 分布范围
ncell(manc) # number of cells 格点数量
dim(manc) # number of rows, columns, layers 数据维度
nlayers(manc) # number of layers 图层个数
res(manc) # xres, yres 像素是多少乘多少的
![be2c598ec30900a16a222173ba81dd92.png](https://i-blog.csdnimg.cn/blog_migrate/c9e6bf48ee7335bb4d32d20eaef16cc8.png)
然后,让我们来对图层进行可视化。可以利用红绿蓝这三个光谱图层合成真彩色图像,也可以利用其它光谱图层合成伪彩色图像,关于这方面的知识,可以参考遥感影像图中真彩色,假彩色,伪彩色是怎样定义的?为什么要分这些类?。这里我们直接用代码进行实现:
# visualization
# true colour composite
manc_rgb <- stack(manc$red, manc$green, manc$blue)
# false colour composite
manc_false <- stack(manc$NIR, manc$red, manc$green)
manc_rgb %>%
plotRGB(.,axes=TRUE, stretch="lin")
manc_false %>%
plotRGB(.,axes=TRUE, stretch="lin")
![90cc6c25049074ae794891abff3a9682.png](https://i-blog.csdnimg.cn/blog_migrate/3c16f3147ad73ea54510b0eae05404fa.jpeg)
![350c193c2f53ba645f7d4e7f892aea52.png](https://i-blog.csdnimg.cn/blog_migrate/57a7e4b4a2b5cf8aa8ed2702917632dc.jpeg)
我们可以只观察一个波段的图层,比如SWIR2:
plot(manc$SWIR2)
也可以同时观察4个图层,基本包中的绘图函数可以这样实现:
## How are these bands different?
#set the plot window size (2 by 2)
par(mfrow = c(2,2))
#plot the bands
plot(manc$blue, main = "Blue")
plot(manc$green, main = "Green")
plot(manc$red, main = "Red")
plot(manc$NIR, main = "NIR")
![dd66676288d523d1b990aa26e6ae242a.png](https://i-blog.csdnimg.cn/blog_migrate/1dde3ee1c8a3f6c11f740d12bad66d30.jpeg)
最后,我们可以尝试使用GGally包的ggpairs函数来探知不同光谱之间的相关性(只进行抽样调查,抽了100个样本):
library(ggplot2)
library(GGally)
manc %>%
as.data.frame(., na.rm=TRUE)%>%
sample_n(., 100)%>%
ggpairs(.,axisLabels="none")
![6a24fa27312e66b3a116850cf1e974eb.png](https://i-blog.csdnimg.cn/blog_migrate/00a17f7195b43af570cfa0c19ab970eb.png)
对角线上是单变量的分布状况,左下角为散点图,右上角是变量两两之间的相关系数,星号*代表显著水平,使用的是Pearson相关系数(参考自Correlation matrix with ggally)。