geom_raster 图中的网格点伪影

问题描述

我正在尝试制作数字高程模型(光栅)的高分辨率图形,但我的绘图似乎有一些扭曲的特征。这是一个可重现的示例:

library(elevatr)
library(raster)
library(tidyverse)
library(sp)

ext <- extent(-864434.2,-771071.7,4019064,4054974) %>%
  as("Spatialpolygons") %>%
  spsample(100,"regular")

crs(ext) <- "+proj=utm +zone=19 +ellps=GRS80 +datum=NAD83"

alt <- get_elev_raster(ext,prj = crs(ext),z = 11) %>%
  crop(ext)
names(alt) <- "alt"

ggplot() + 
  geom_raster(data = as.data.frame(alt,xy = T),aes(x = x,y = y,fill = alt)) +
  scale_fill_gradientn("Elevation (m)",colors = terrain.colors(256),na.value = NA) +
  theme(legend.position = "none")
ggsave("gg_gsmnp_alt_test.jpeg",width = 8,height = 4,units = "in",dpi = 600)

Plot with artifact #1

Plot with artifact #2

随着分辨率的提高,伪影变得更加普遍(如果我将 z 参数设置为更高的分辨率,例如 1112,伪影会更加丰富)。>

计算山体阴影层会加剧这些伪影:

hs <- hillShade(terrain(alt,opt = "slope"),terrain(alt,opt = "aspect"))

ggplot() + 
  geom_raster(data = as.data.frame(alt,fill = alt)) +
  geom_raster(data = as.data.frame(hs,alpha = 1 - layer),fill = "gray20") +
  scale_fill_gradientn("Elevation (m)",na.value = NA) +
  scale_alpha(guide = FALSE,range = c(0,1))
ggsave("gg_gsmnp_alt_hs_test.jpeg",dpi = 600)

Plot with artifact #3

此外,如果我使用双线性插值聚合该层,则可以预见到伪影会消失:

alt_agg <- alt %>%
   aggregate(fact = 2)
hs_agg <- hs %>%
  aggregate(fact = 2)

ggplot() + 
  geom_raster(data = as.data.frame(alt_agg,fill = alt)) +
  geom_raster(data = as.data.frame(hs_agg,1)) +
  theme(legend.position = "none")
ggsave("gg_gsmnp_alt_hs_agg_test.jpeg",dpi = 600)

Plot with interpolated values (no artifacts)

虽然图形问题很小,但我很好奇这些工件是否会导致从栅格中提取的数据出现异常。例如,如果我在这些位置使用 raster::extract 提取数据,我会收到虚假值吗?

任何建议或答案将不胜感激。

最好,

-亚历克斯。 (他/他/他的)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...