Нарисуйте прямоугольник на графике растровой карты

Я использую rasterVis::gplot() построить растровый слой, созданный rasterпакет. Построение одного только растра работает нормально:

library(raster)
library(rasterVis)

r1 <- raster(nrow=10, ncol=10)
values(r1) <- runif(ncell(r1))

gplot(r1) +
  geom_raster(aes(fill=value))

Но когда я пытаюсь добавить прямоугольник на графике geom_rect()Я получаю ошибку

df <- data.frame(xmin=-50, xmax=50, ymin=-50, ymax=50)
gplot(r1) +
  geom_raster(aes(fill=value)) +
  geom_rect(data=df, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax))

Ошибка в eval(expr, envir, enclos): объект 'y' не найден

Что я делаю неправильно?

1 ответ

Решение

geom_rect ожидает, что все эстетики объявлены (явно или неявно) ранее, но нет y в df, Используйте аргумент inherit.aes = FALSE чтобы отключить это поведение.

gplot(r1) +
  geom_raster(aes(fill=value)) +
  geom_rect(data=df, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), 
    inherit.aes = FALSE)

В качестве альтернативы используйте annotate добавить прямоугольник.

gplot(r1) +
  geom_raster(aes(fill=value)) +
    with(df, annotate(geom = "rect", xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax))
Другие вопросы по тегам