geom_raster() 在地图顶部产生白色表面

Posted

技术标签:

【中文标题】geom_raster() 在地图顶部产生白色表面【英文标题】:geom_raster() produces a whitish surface ontop of the map 【发布时间】:2021-07-29 04:41:58 【问题描述】:

我正在尝试在地图上绘制热图以显示变量的地理分布。带有荒谬数据的最低工作代码如下:

library(ggmap)
library(osmdata)
box <- c(left = 2.075, bottom = 41.325, right = 2.25, top = 41.47)
map <- get_stamenmap(bbox = box, maptype = "terrain-lines", zoom = 13)

lon_grid <- seq(2.075, 2.25, length.out = 30)
lat_grid <- seq(41.325, 41.47, length.out = 30)
grid <- expand.grid(lon_grid, lat_grid)
z <- c(rep(NA, 30^2/2), rnorm(30^2/2))
dataset <- cbind(grid, z)

ggmap(map) ### Plot 1

ggmap(map) + ### Plot 2
  geom_raster(data = dataset, aes(x = Var1, y = Var2, fill = z), alpha = 0.5,  interpolate = TRUE) +
  scale_fill_viridis_c(option = "magma", na.value = "transparent") +
  coord_equal()

第一张地图看起来很完美:整齐、干净、线条清晰。

第二个,添加了 geom_raster 层,看起来(除了更宽)稍微模糊,不是那么清晰。看到 geom_raster 线在地图顶部添加了一个白色图层(如果仔细观察,它甚至没有完全覆盖它)。这绝对是可怕的,我想删除它,或者换句话说,当 geom_raster 生成的图块采用 NA 值时,我希望它采用“透明”颜色。

有什么想法吗?

【问题讨论】:

【参考方案1】:

如果我正确理解了这个问题,那么光栅中的 NA 似乎并不完全透明。看看 scale_fill_viridis_c 更改为 na.value = NA 是否符合您的要求。

library(ggmap)
library(osmdata)
box <- c(left = 2.075, bottom = 41.325, right = 2.25, top = 41.47)
map <- get_stamenmap(bbox = box, maptype = "terrain-lines", zoom = 13)

lon_grid <- seq(2.075, 2.25, length.out = 30)
lat_grid <- seq(41.325, 41.47, length.out = 30)
grid <- expand.grid(lon_grid, lat_grid)
z <- c(rep(NA, 30^2/2), rnorm(30^2/2))
 <- cbind(grid, z)

ggmap(map) + ### Plot 2
  geom_raster(data = dataset, aes(x = Var1, y = Var2, fill = z), alpha = 0.5,  interpolate = TRUE) +
  scale_fill_viridis_c(option = "magma", na.value = NA) +
  coord_equal()

这是它的输出:

【讨论】:

就是这样,太棒了,非常感谢!

以上是关于geom_raster() 在地图顶部产生白色表面的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 未正确保存 geom_raster() 绘图

geom_raster 和 geom_point 的两种颜色渐变

python 在地图上绘制iso线和iso表面

UITableView顶部的白色背景[重复]

如何在 Pygame 表面中实现洪水填充

如何更改 ggplot2 geom_raster 中的插值/平滑