使用ggplot绘制RasterLayer对象

6l7fqoea  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(142)

我非常抱歉,但是我觉得这个问题没有很好的示例数据集,因此我无法生成可重复的示例。如果这使得这个问题站不住脚,那么我一定会删除。
我尝试使用geom_raster()在ggplot2中绘制一个RasterLayer对象,但是得到了一个错误。我发现似乎必须将RasterLayer对象转换为 Dataframe ,但是做一个简单的转换似乎对这个特定的RasterLayer不起作用。
作为参考,使用plot()函数可以轻松地绘制这些数据,但由于ggplot的多功能性,如果可能的话,我希望在ggplot中完成。
下面是试图绘制数据的代码。注意,对象存储在一个列表中,还有许多其他我想要绘制的模型对象:

library(ggplot2)
ggplot() + geom_raster(data = mylist$model_object)

和错误:

`data` must be a <data.frame>, or an object coercible by `fortify()`, not an S4 object with class
  <RasterLayer>.
Run `rlang::last_error()` to see where the error occurred.

下面是我运行mylist $model_object时发生的情况:

class      : RasterLayer 
dimensions : 114, 180, 20520  (nrow, ncol, ncell)
resolution : 0.1666667, 0.1666667  (x, y)
extent     : -116, -86, 14, 33  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs 
source     : memory
names      : layer 
values     : 0, 0.5845846  (min, max)

下面是这个对象的结构:
一个三个三个一个
我完全理解,如果这是不够的去小康。如果任何人有一个关于容易访问光栅数据在线的建议,我可以作为一个代理repoducible例子使用,这将是非常感谢。谢谢!

8wigbo56

8wigbo561#

我们可以使用as.data.frame方法来计算raster

> grep("data.frame", methods(class = "RasterLayer"), value = TRUE)
[1] "as.data.frame,Raster-method"        "extract,Raster,data.frame-method"   "rasterize,data.frame,Raster-method" "subs,Raster,data.frame-method"
as.data.frame(mylist$model_object, xy = TRUE)
y53ybaqx

y53ybaqx2#

我会用“地”和“地”

library(raster)
library(terra)
library(tidyterra)
library(ggplot2)

# RasterLayer
f <- system.file("external/test.grd", package="raster")
r <- raster(f)

# create SpatRaster (can also do `x <- rast(f)`
x <- rast(r)

ggplot() + geom_spatraster(data = x)

相关问题