Добавление баллов в ECDF без внешних вычислений

#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))
 

пошаговый график с точками