【问题标题】:How to project raster and observation points with ggplot [closed]如何使用 ggplot 投影栅格和观察点 [关闭]
【发布时间】:2020-05-05 10:29:20
【问题描述】:

他都是! 我是 R 世界的新手,我认为这将是一个愚蠢的错误:
我想投影一个代表我的“学习区”的栅格,添加来自rgbif 的观察结果。

首先,我使用多边形在“研究区”进行了实物观察:

wkt <- 'POLYGON((14.022120 41.583456,13.928857 41.610301,13.607180 41.789949,13.645924 42.021854,13.779864 42.029311,14.035472 41.823996,14.066175 41.751961,14.057895 41.614899,14.022120 41.583456))'

Picus_viridis <- occ_data(scientificName = "Picus viridis", geometry = wkt, return = "data", limit = 1999)
Picus_viridis<-Picus_viridis$data

其次,我上传了栅格,将其裁剪为感兴趣的扩展并分配了一个投影:

elev <- raster("data/gtopo30/gtopo30.tif")
elev_park <- crop(elev, extent(13.398953, 14.235655, 41.402820, 42.064252))

projection(elev_park) <- "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"

我尝试使用ggplot 绘制带有观察点的栅格,但 R 说有错误:

ggplot() +
  geom_raster(elev_park, aes(x = x, y = y)) +
  geom_point(aes(x = Picus_viridis$decimalLongitude, y = Picus_viridis$decimalLatitude))

错误:mapping 必须由 aes() 创建

有谁知道问题出在哪里?


光栅 GTOPO30:

> elev_park
class      : RasterLayer 
dimensions : 84, 112, 9408  (nrow, ncol, ncell)
resolution : 0.008333334, 0.008333334  (x, y)
extent     : 13.30001, 14.23334, 41.40001, 42.10001  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : gtopo30 
values     : 16, 2689  (min, max)

【问题讨论】:

  • 如果你提供一个可重现的例子stackoverflow.com/questions/5963269/… 会更容易提供帮助
  • 看起来您可能缺少ggplotdata 参数?
  • 另外,映射应该是 geom_raster 中的第一个参数。

标签: r ggplot2 raster r-raster


【解决方案1】:

如果没有您的数据集,我无法确认这是否全部有效,但ggplot 用法的一般结构是:

  • 在您的ggplot() 调用中,您应该提供数据集和映射。您没有必须这样做,但通常这是一个好主意,除非您使用管道命令 (%&gt;%) 或类似的东西。您的基地mapping= 也几乎总是在那里提供。将此功能视为“在没有数据的情况下创建基本图”。

  • 所有geom_ 函数(据我所知)都有一个以mapping= 开头的参数设置,然后是data=,然后是其他参数。这意味着如果您没有显式声明结构,则第一个参数将应用于mapping=。这就是你的geom_raster(elev_park,...) 会抛出错误的原因。

  • 通常最好的做法是发送 geoms data 作为数据集和映射作为列的名称——而不是命名向量。因此,您可以将其设置为data=my_datasetmapping=aes(x=column1...),而不是x=my_dataset$column1

话虽如此,我建议的修订应该会给你一些东西如下。这假设 elev_park$xelev_park$y 存在。如果不是,请将 x=y= 映射替换为正确的列名(未加引号)。

ggplot(elev_park, aes(x=x, y=y)) +
  geom_raster() +     # mapping not needed.  It's passed from ggplot()
  geom_point(         # should be explicit when setting mapping and data
    data=Picus_viridis,
    mapping=aes(x=decimalLongitude, y =decimalLatitude)
  )

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 2021-08-23
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2017-10-02
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多