Разделенный geom_smooth после использования оператора pipe - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с оператором канала в ggplot2.Мой набор данных "ирис", и мой код:

iris %>% 
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot(aes(x = Petal.Length, y = Petal.Width, col = Species, shape = 
petalPlus)) + 
geom_point() +
theme_bw() +
geom_smooth(method = "lm")

Проблема в том, что я получаю 4 линии линейной регрессии (для каждого цвета и формы).Я хотел бы знать, как получить одну линию регрессии и по какой причине в настоящее время я получаю 4 строки.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Это не из-за того, что вы используете трубного оператора, а из-за того, что все ваши спецификации aes вместе.Это означает, что для функции geom_smooth требуются разные линии всех комбинаций цвета и формы.Один из способов сделать это - изменить порядок вызовов geom и настроить их отдельные aes в соответствии с вашими требованиями:

png()
print(
 iris %>% 
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot(aes(x = Petal.Length, y = Petal.Width)) + 
   theme_bw() +
   geom_smooth(method = "lm")+
   geom_point(aes(col=Species,shape=petalPlus))
 dev.off() )

enter image description here

0 голосов
/ 23 мая 2018

Вы получаете 4 строки, потому что geom_smooth наследует shape и col aes от вызова ggplot, и они неявно определяют group aes.

Чтобы избежатьон либо определяет aes в каждом geom, либо определяет их только в geom_smooth, отключая наследование:

library(dplyr)
library(ggplot2)

iris %>% 
  mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
  ggplot() + 
  geom_point(aes(x = Petal.Length,
                 y = Petal.Width, 
                 col = Species, 
                 shape = petalPlus)) +
  theme_bw() +
  geom_smooth(aes(x = Petal.Length, y = Petal.Width), method = "lm")

iris %>% 
  mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
  ggplot(aes(x = Petal.Length, 
             y = Petal.Width, 
             col = Species, 
             shape = petalPlus)) + 
  geom_point() +
  theme_bw() +
  geom_smooth(aes(x = Petal.Length, y = Petal.Width), method = "lm", inherit.aes = FALSE)

Создано в 2018-05-23 с помощью пакета Представить (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...