Добавление линии geom_smooth на диаграмму и получение ошибок geom_path: Каждая группа состоит только из одного наблюдения. Вам нужно скорректировать эстетику группы?

Извините, я знаю, что есть несколько тем по этой проблеме, которые я прочитал, но, похоже, не добился прогресса

Просто я хотел бы добавить линию регрессии к моему графику: время взлома пароля по сравнению с возрастом.

время взломать пароль va age

Что-то похожее на  Этот пример

Однако, когда я пытаюсь использовать geom_smooth, я получаю эту ошибку geom_path: Каждая группа состоит только из одного наблюдения. Вам нужно скорректировать эстетику группы?

Кто-нибудь знает, можно ли добавить регрессию или линию тренда?

    p3 <- ggline(DF6, x = "units_of_time", y = "as.numeric.Final_DF.age.", 
       add = c("mean_se", "jitter"), 
       color =  "units_of_time",
       ylab = "Age", xlab = "Time to crack") + 
  scale_x_discrete(labels = c("instant", "seconds", "minutes", 
                              "hours", "days", "months", "years")) + 
  scale_color_manual(values = c("red", "orange", "yellow", "grey", 
                                "black", "light green", "green")) + 
  ggtitle("Time to crack password vs age") + 
  guides(color=FALSE)

p3 +  geom_smooth(aes(colour = units_of_time, group = units_of_time))

dput(DF6)
structure(list(as.numeric.Final_DF.age. = c(49, 47, 53, 45, 49, 
51, 45, 45, 51, 43, 49, 51, 45, 49, 37, 45, 47, 59, 55, 39, 53, 
51, 43, 51, 49, 47, 41, 53, 49, 39, 47, 51, 55, 43, 59, 49, 53, 
57, 47, 41, 55, 47, 53, 41, 57, 43, 49, 57, 55, 61), Final_DF.pswd_length = c(8L, 
4L, 8L, 12L, 12L, 10L, 7L, 5L, 6L, 9L, 9L, 5L, 7L, 4L, 13L, 7L, 
9L, 8L, 6L, 13L, 12L, 5L, 7L, 5L, 10L, 11L, 10L, 12L, 8L, 10L, 
10L, 4L, 6L, 10L, 6L, 10L, 14L, 6L, 10L, 11L, 4L, 9L, 8L, 11L, 
4L, 7L, 3L, 8L, 9L, 12L), units_of_time = c(1, 1, 1, 7, 2, 2, 
2, 3, 1, 7, 1, 2, 5, 2, 7, 6, 7, 1, 1, 7, 2, 2, 7, 2, 2, 7, 7, 
4, 2, 7, 7, 2, 1, 7, 1, 2, 4, 1, 7, 7, 2, 1, 2, 7, 1, 4, 1, 1, 
1, 1)), row.names = c(NA, -50L), class = "data.frame")

r
person Marty    schedule 01.01.2021    source источник


Ответы (1)


Вместо пакета ggpubr я буду использовать напрямую пакет ggplot2.
Создание вектора xlabels не является строго необходимым, но я определил его, чтобы упростить чтение кода построения.

library(ggplot2)

xlabels <- c("instant", "seconds", "minutes", 
             "hours", "days", "months", "years")
xlabels <- setNames(sort(unique(DF6$units_of_time)), xlabels)


p3 <- ggplot(DF6, aes(x = units_of_time, y = as.numeric.Final_DF.age.)) +
  geom_jitter(aes(colour = factor(units_of_time)), width = 0.25) +
  scale_x_continuous(breaks = xlabels, labels = names(xlabels)) + 
  scale_color_manual(values = c("red", "orange", "yellow", "grey", 
                                "black", "light green", "green")) + 
  ggtitle("Time to crack password vs age") + 
  labs(x = "Units of time", y = "Age") +
  guides(color = FALSE) +
  theme_bw()

p3 + geom_smooth(method = lm, formula = y ~ x)

введите описание изображения здесь

person Rui Barradas    schedule 01.01.2021
comment
Отлично спасибо - person Marty; 01.01.2021