即使我在ggplot中提供了数据,也找不到对象x

问题描述 投票:0回答:1

这是一个只有 1 个属性的栅格图层。

我不知道我应该提供什么数据。我正在尝试创建一个在多边形顶部带有光栅图层的地图。我仍然停留在单独映射栅格图层上,并且在使用正确的边框和其他信息映射栅格图层对象方面找不到更简单的参考。错误消息首先说我应该将其强制转换为数据帧,这是通过添加 as.data.frame 函数来完成的。下一个是说没有找到对象 X,我不太明白为什么,因为我已经提供了数据。网站上的其他答案说这与 aes 有关,但我不知道如何修复它。

ggplot() +
  geom_raster(data = as.data.frame(rasterlayer), aes(x = x, y = y, fill = "green")) +
  scale_fill_brewer(type = "div", palette = "YlGn", guide = "legend", direction = -1) +
  guides(fill = guide_legend(title = "Resistance")) +
  theme_grainscape() +
  theme(legend.position = "right",
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        panel.border = element_rect(colour = "black", fill=NA, size=2))`

这是错误消息和 rlang:last_trace()


<error/rlang_error>
Error in `geom_raster()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error:
! object 'x' not found
---
Backtrace:
     ▆
  1. ├─base (local) `<fn>`(x)
  2. └─ggplot2:::print.ggplot(x)
  3.   ├─ggplot2::ggplot_build(x)
  4.   └─ggplot2:::ggplot_build.ggplot(x)
  5.     └─ggplot2:::by_layer(...)
  6.       ├─rlang::try_fetch(...)
  7.       │ ├─base::tryCatch(...)
  8.       │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
  9.       │ │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
 10.       │ │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
 11.       │ └─base::withCallingHandlers(...)
 12.       └─ggplot2 (local) f(l = layers[[i]], d = data[[i]])
 13.         └─l$compute_aesthetics(d, plot)
 14.           └─ggplot2 (local) compute_aesthetics(..., self = self)
 15.             └─base::lapply(aesthetics, eval_tidy, data = data, env = env)
 16.               └─rlang (local) FUN(X[[i]], ...)
Run rlang::last_trace(drop = FALSE) to see 5 hidden frames.

我只是希望它能够创建一张地图,我可以在上面添加更多详细信息。

r ggplot2 rstudio gis raster
1个回答
0
投票

我不确定你提供什么数据作为栅格层,但栅格需要一个数据帧,如果你说 aes(x = x, y = y, fill = "green"),数据帧应该至少有两列、x 和 y。

如果你只想要一个简单的背景,并且不想使用geom_rect(),它可能是最小的数据帧:

n = 1
ggplot() +
  geom_raster(
    data = data.frame( x = rep(1:n, each = n), y = rep(1:n, n)),
    aes(x = x, y = y, fill = "green")) +
  scale_fill_brewer(type = "div", palette = "YlGn", guide = "legend", direction = -1) +
  guides(fill = guide_legend(title = "Resistance")) +
  theme_grainscape() +
  theme(legend.position = "right",
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        panel.border = element_rect(colour = "black", fill=NA, size=2)) 
© www.soinside.com 2019 - 2024. All rights reserved.