R-ggplot2 和rasterVis 实现空间栅格(Raster)数据的可视化绘制教程

2021-02-22 12:00:50 浏览数 (1)

本期将推出一篇关于栅格(Raster)数据的R语言可视化的绘制教程,其目的也是为大家提供绘图思路。本期绘制的数据为30m的土地利用(land use)数据,具体区域为广州市。主要内容如下:

  • R-ggplot2 可视化绘制
  • R-rasterVis 可视化绘制
  • Arcgis 可视化结果展示

R-ggplot2 可视化绘制

由于对ggplot2的绘图体系还不是很了解,所以这一步花费很长时间,但也对ggplot2的绘图语法有了更深的理解。话不多说,我们直接上代码,如下:

代码语言:javascript复制
# Raster_data_Vis.R
library(ggplot2)
library(raster)
library(viridis)  
library(ggthemes) 
library(sf)

# 添加字体
windowsFonts(
   Cinzel = windowsFont("Cinzel"),#这里使用的是字体的主题名称
   Poppins = windowsFont("Poppins"),
   IBMPSBold = windowsFont("IBMPlexSans-Bold"),
   Roboto_Mono = windowsFont("Roboto Mono"),
   Open_Sans = windowsFont("Open Sans"),
   Open_Sans_ExtraBold = windowsFont("Open Sans ExtraBold"),
   Times_New_Roman = windowsFont("Times New Roman")
  )

#数据
datafold <- 'E:\Data_ning\RStudio projects\guanzhoulanduse\gzlu.tif'
test <- raster(datafold) 

#很关键的一步:将栅格数据转成可供ggplot2绘制的数据格式
test_spdf <- as(test, "SpatialPixelsDataFrame")
test_df <- as.data.frame(test_spdf)
# 赋值列名
colnames(test_df) <- c("value", "x", "y")

#开始绘图
land_use <- ggplot()  
    geom_raster(data = test_df , aes(x = x, y = y,fill = factor(value)))   
    scale_fill_manual(name = "Category",values = classcolor,labels = landclass)  
    labs(x ='Longitude(E)',y="Latitude(N)",
       title = "Raster data Charts Exercise",
       subtitle = "land use data",
       caption = 'Visualization by DataCharm') 
    theme_bw() 
    theme(text = element_text(family = "Times_New_Roman",face='bold'),
          title = element_text(family = 'Times_New_Roman',size = 16,face = 'bold'),
          axis.text = element_text(family = 'Times_New_Roman',size = 12,face = 'bold'),  
          #修改刻度线内
          axis.ticks.length=unit(-0.22, "cm"),
          #设置刻度label的边距
           axis.text.x = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm")), 
           axis.text.y = element_text(margin=unit(c(0.5,0.5,0.5,0.5), "cm"))
         )
land_use

可视化结果如下:

注意:

  • 在使用ggsave()保存成pdf文件时,有些字体将会消失,后续会解决此类问题。上面结果为png格式。

R-rasterVis 可视化绘制

在查阅相关资料时发现,绘制Raster数据时,也可采用R第三方拓展包 rasterVis 包进行快速绘制,绘制代码如下:

代码语言:javascript复制
library(raster)
library(rasterVis)

nlcd <- brick('E:\Data_ning\RStudio projects\guanzhoulanduse\gzlu.tif')
names(nlcd) = c('Gzland')
landclass <- c("Cropland", "Forest", "Grassland", "Shrubland", "Wetland", "Water", "Impervious surface", "Bareland")
classcolor <- c("#96298A", "#05AD27", "#EB6805", "#E6E8DF", "#2200FF", "#0D4763", "#DEE64C", "#4A150B")

nlcd2011 <- nlcd[[1]]
nlcd2011 <- ratify(nlcd2011)
# 
test <- levels(nlcd2011)[[1]]
test$landcover <- landclass
levels(nlcd2011) <- test

png(file = "F:\DataCharm\R-rasterVis\guangzhou_landuse3.png", 
    height=nrow(nlcd2011), width=ncol(nlcd2011), res=500)
levelplot(nlcd2011, col.regions = classcolor, main = 'Guangzhou LandUse',
                  xlim=c(112.9, 114.2), ylim=c(22.4, 24))

dev.off()

可视化结果如下:

具体的其他图层属性设置,大家可以直接查看官网:rasterVis官网

Arcgis 可视化结果展示

前面介绍了两种代码可视化的绘制教程,其实最开始我是使用Arcgis进行可视化展示的,不得不说,Arcgis 还是 很强大方便的,但代码绘图有代码绘图的好,我们各取所需,这里只展示最终的制作结果:

注: 图中标题年份可能不正确,大家阅读时留意。

0 人点赞