#r #ggplot2 #aesthetics #ecdf
Вопрос:
Я хотел бы выделить некоторые моменты в a ggplot
с несколькими ECDFs, указав эстетический атрибут.
Я попробовал следующее:
iris$dot <- ifelse(iris$Sepal.Length < 6, "<", ">")
ggplot(iris,
aes(x = Sepal.Length,
col = Species))
stat_ecdf()
geom_point(aes(y = ecdf(Sepal.Length)(Sepal.Length), #stat_ecdf doesn't seem to support shape aes
shape = dot))
scale_shape_manual(values = c(3, NA))
Однако, как вы можете видеть из графика, все точки смещены, возможно, потому, что группировка по col = Species
не была учтена.
Можно ли получить желаемые результаты, избегая вычислений вне ggplot
вызова?
Ответ №1:
Не похоже, что геомы, включенные в ggplot2, сделают это. Вы могли бы написать свой собственный геом, если хотите, но самый простой способ — это просто выполнить обработку данных самостоятельно. ggplot работает лучше всего, когда вы позволяете ему строить графики, а не пытаетесь заставить его выполнять обобщение всех данных
iris %>%
group_by(Species) %>%
mutate(y = ecdf(Sepal.Length)(Sepal.Length)) %>%
ggplot(aes(Sepal.Length, y, color=Species))
geom_step()
geom_point(aes(shape=dot))
scale_shape_manual(values = c(3, NA))