【问题标题】:How to straighten skewed ggplot2 map with raster data?如何用栅格数据拉直倾斜的 ggplot2 地图?
【发布时间】:2021-03-29 06:31:45
【问题描述】:

在绘制我的 NLCD 树冠数据(栅格)地图时,地图不是直的或与地图边界对齐。使用 projectRaster 函数时似乎会出现偏斜。有没有办法将光栅调整为水平甚至与边界?当运行下面的代码/查看上传的图像时,我想删除的偏斜是深灰色的不均匀边框,同时让树数据填充整个帧。我一直无法找到任何解决方案,所以我很感激任何建议!

图片歪斜:1

library(sf)
#devtools::install_github("ropensci/FedData")
library(FedData)
library(ggplot2)
library(raster)
library(RColorBrewer)

ext <- extent(734666.5, 795961.6, 4017870, 4053632)

extent <- polygon_from_extent(raster::extent(ext), proj4string='+proj=utm +datum=NAD83 +zone=16N')

WMAtc <- get_nlcd(template = polygon_from_extent(ext, (proj4string = "+proj=utm +zone=16N ellps+NAD83")), year = 2016, dataset = "Tree_Canopy", label = "Can", force.redo = T) 

WMAtc_projected <- projectRaster(WMAtc, crs = "+proj=utm +zone=16N +datum=NAD83") 

tc_df <- as.data.frame(WMAtc_projected, xy=TRUE) 

ggplot() + 
  geom_raster(data = tc_df, aes(x = x, y = y, fill=tc_df[,3])) +
  scale_fill_gradientn(colors = brewer.pal(8, "Greens"), name = "Tree Canopy Cover")

【问题讨论】:

    标签: r ggplot2 raster map-projections


    【解决方案1】:

    一位教授慷慨地帮助我解决了这个问题。使用他的代码,您可以看到范围边界框与下载的 NLCD 数据相关的位置。投影时,NLCD 数据会调整并扩展到原始范围之外。要解决此问题,您可以裁剪额外的数据,它会重新对齐地图的图像。

    library(FedData)
    library(ggplot2)
    library(raster)
    library(RColorBrewer)
    library(sf)
    
    ext <- extent(734666.5, 795961.6, 4017870, 4053632)
    
    extent <- polygon_from_extent(raster::extent(ext), proj4string='+proj=utm +datum=NAD83 +zone=16N')
    
    WMAtc <- get_nlcd(template = polygon_from_extent(ext, (proj4string = "+proj=utm +zone=16N ellps+NAD83")),year = 2016, dataset = "Tree_Canopy", label = "Can")
    
    WMAtc_projected <- projectRaster(WMAtc, crs = "+proj=utm +zone=16N +datum=NAD83")
    
    tc_df <- as.data.frame(WMAtc_projected, xy=TRUE)
    
    ggplot() +
      geom_raster(data = tc_df, aes(x = x, y = y, fill=tc_df[,3])) +
      scale_fill_gradientn(colors = brewer.pal(8, "Greens"), name = "Tree Canopy Cover") +
      geom_sf(data=st_as_sf(extent), fill=NA, col="red") # show desired raster extent
    
    WMAtc_projected_cropped = crop(WMAtc_projected, extent) #crop to remove extra bits
    tc_df_cropped <- as.data.frame(WMAtc_projected_cropped, xy=TRUE)
    
    ggplot() +
      geom_raster(data = tc_df_cropped, aes(x = x, y = y, fill=tc_df_cropped[,3])) +
      scale_fill_gradientn(colors = brewer.pal(8, "Greens"), name = "Tree Canopy Cover") +
      geom_sf(data=st_as_sf(extent), fill=NA, col="red")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2013-10-17
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 2016-12-23
      相关资源
      最近更新 更多