Невозможно добавить данные в geom_rect в ggplot в версии канала; однако без канала (%>%) это работает

#r #ggplot2 #dplyr

#r #ggplot2 #dplyr

Вопрос:

Я не мог понять, где ошибка в этом коде.

Следующий код работает нормально

 ggplot(mtcars)   geom_point(aes(wt, mpg))  
geom_rect(data=data.frame(xmin = -Inf, xmax = 4, ymin = -Inf, ymax = Inf),
        aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
        fill = "light blue", alpha = 0.5)
  

Однако тот же код при использовании %>% или в версии dplyr выдает ошибку

 mtcars %>% 
ggplot(aes(x= wt, y= mpg))   geom_point()  
geom_rect(data=data.frame(xmin = -Inf, xmax = 4, ymin = -Inf, ymax = Inf),
        aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
        fill = "light blue", alpha = 0.5)
  

Отображается следующая ошибка
Ошибка в FUN (X[[i]], …): объект ‘wt’ не найден

Редактировать: поскольку может возникнуть проблема с отображением, как указано ниже, однако работает следующее; просто часть данных удаляется из geom_rect

 ggplot(mtcars, aes(wt, mpg))   geom_point()  
geom_rect(aes(xmin = -Inf, xmax = 4, ymin = -Inf, ymax = Inf),
        fill = "light blue", alpha = 0.05)
  

Спасибо за ваше время и предложения.

Ответ №1:

В вашей версии канала указано сопоставление, к ggplot которому geom_rect также применяется. Укажите это geom_point вместо этого.

 mtcars %>% 
  ggplot()  
  geom_point(aes(x= wt, y= mpg))  
  geom_rect(data=data.frame(xmin = -Inf, xmax = 4, ymin = -Inf, ymax = Inf),
        aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax),
        fill = "light blue", alpha = 0.5)
  

Комментарии:

1. Означает ли это, что geom_rect зависит от geom_point для рисования нужного прямоугольника. Спасибо.

2. Поскольку отображение определяется отдельно в geom_rect(), должно ли оно конфликтовать с отображением в ggplot()..

3. Сопоставления, определенные в ggplot вызове, применяются ко всем геометриям, если в сопоставлении для геометрии не указана та же эстетика. Так geom_rect было эстетично x = wt , потому что отображение в geom_rect явно не указано x .

4.В этом примере значение data for geom_rect равно mtcars . Вы не получаете ошибку, потому x = wt что она действительна, потому wt что существует в mtcars . В исходном примере data для geom_point и было по-другому geom_rect . У geom_rect data него не было столбца wt .

5. Вы можете сохранить оригинал как есть и использовать inherit.aes = FALSE geom_rect() .