Ggplot2: несколько линий тренда на фасетном графике

Я пытаюсь добавить две линии тренда к данным, нанесенным на мой фасеточный график для двух разных глубин (Road=color). Geom_smooth работает для создания первого графика (pred_new2) с линией тренда, но как только я добавляю facet_wrap - график создается, но без каких-либо линий тренда / сглаживания и без каких-либо ошибок.

pred_new$Site <- factor(pred_new$Site, 
                        levels = c("A", "B", "C", "D", "E", "F", "G", "H", "I"))

pred_new2 <- ggplot(pred_new, aes(x = No_cars, y = Site, color = Road)) + 
  geom_point() + 
  geom_smooth(aes(x = No_cars, y = Site, color = Road), method = "lm")

pred_new3 <- pred_new2 + 
  geom_errorbarh(aes(xmin = No_cars - standerror, xmax = No_cars + standerror))

pred_new4 <- pred_new3 + 
  facet_wrap(~ Days, scales = "free_x") + 
  ylab("Site") + 
  xlab("No_cars") + 
  theme_classic()
pred_new4

Любая помощь будет принята с благодарностью.

pred_new = structure(list(Site = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
                                             8L, 9L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 4L, 5L, 
                                             6L, 7L, 8L, 9L, 1L, 2L, 3L,  4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L, 
                                             4L, 5L, 6L, 7L, 8L, 9L), 
                                           .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I"), 
                                           class = "factor"), 
                          Days = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
                                             3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L), 
                                           .Label = c("Thursday", "Tuesday", "Wednesday"), 
                                           class = "factor"),
                          Road = structure(c(1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                             1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                             2L), 
                                           .Label = c("east", "west"), 
                                           class = "factor"), 
                          No_cars = c(15.266427, 8.323348, 8.368608, 9.747807, 7.976356, 8.5684, 6.604537, 
                                      3.812109, 6.719904, 4.799487, 4.996091, 4.796, 4.991479, 4.525789, 
                                      5.115136, 4.939559, 4.783792, 4.185007, 3.857553, 3.095228, 2.890727, 
                                      3.132784, 3.352974, 3.42561, 2.900284, 2.35416, 2.889976, 17.266427, 
                                      10.323348, 10.368608, 11.747807, 9.976356, 10.5684, 8.604537, 5.812109, 
                                      8.719904, 6.799487, 6.996091, 6.796, 6.991479, 6.525789, 7.115136, 
                                      6.939559, 6.783792, 6.185007, 5.857553, 5.095228, 4.890727, 5.132784, 
                                      5.352974, 5.42561, 4.900284, 4.35416, 4.889976), 
                          standerror = c(1.7108483, 0.8175014, 0.6365042, 0.7171749, 0.9978123, 0.9881427, 
                                         0.9215597, 0.6365042, 1.6303975, 0.404129, 0.1934362, 0.1503158, 
                                         0.1694848, 0.2362161, 0.2337497, 0.2180687, 0.1604379, 0.3902528, 
                                         0.3276444, 0.1568268, 0.1218673, 0.1374084, 0.1915103, 0.1895107, 
                                         0.1767974, 0.1300738, 0.3163943, 1.7108483, 0.8175014, 0.6365042, 
                                         0.7171749, 0.9978123, 0.9881427, 0.9215597, 0.6365042, 1.6303975, 
                                         0.404129, 0.1934362, 0.1503158, 0.1694848, 0.2362161, 0.2337497,
                                         0.2180687, 0.1604379, 0.3902528, 0.3276444, 0.1568268, 0.1218673, 
                                         0.1374084, 0.1915103, 0.1895107, 0.1767974, 0.1300738, 0.3163943)), 
                     row.names = c(NA, -54L), class = "data.frame")

Добро пожаловать в SO Elle Blank. Я настоятельно рекомендую вам отформатировать код как код. Это облегчает людям чтение и, следовательно, помогает им помогать вам. Я сделал это за вас в этом вопросе.

James Jones 07.09.2018 03:36

Спасибо, @JamesJones, впервые задав вопрос!

Elle Bowd 07.09.2018 03:57

Попробуйте опубликовать свои данные или минимальный набор данных игрушек, достаточный для воспроизведения проблемы. Одна из возможностей заключается в том, что добавление фасетов означает, что на фасет недостаточно точек для рисования подобранной линии, но трудно сказать, не видя данных.

arvi1000 07.09.2018 04:08

@ arvi1000 Я добавил данные, пожалуйста, смотрите выше

Elle Bowd 07.09.2018 04:39

есть 9 баллов за каждую грань

Elle Bowd 07.09.2018 04:47

@ElleBlank: используйте dput(pred_new) для обмена данными. Подробнее здесь stackoverflow.com/questions/5963269/…

Tung 07.09.2018 05:39

Для каждого уровня Days у вас есть только одно наблюдение в каждой категории Road (east или west), и поскольку Site является фактором, не может быть никакой тенденции.

Adela 07.09.2018 10:56

Каков ваш ожидаемый результат?

Adela 07.09.2018 11:01

Спасибо, Адела. Я хотел изобразить тенденцию no_cars на разных сайтах .. есть ли способ обойти это?

Elle Bowd 07.09.2018 11:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
625
1

Ответы 1

Я предполагаю, что вы поменяете топоры местами. Чтобы включить тренд, вам нужны числовые значения для Site, поэтому я включаю as.numeric(Site) в ggplot.

library(ggplot2)

ggplot(pred_new, aes(x = as.numeric(Site), y = No_cars, color = Road)) + 
  geom_point() + 
  geom_smooth(method = "lm") +
  geom_errorbar(aes(ymin = No_cars - standerror, ymax = No_cars + standerror)) +
  xlab("Site") + 
  # this will recode your x-axis
  scale_x_continuous(breaks = 1:9, labels = LETTERS[1:9]) +
  facet_wrap(~ Days, scales = "free_x") + 
  theme_classic() +
  # you can swap x and y axes with coord_flip()
  coord_flip()

Это желаемый результат?

Если вам действительно нужен Site на оси Y, вы можете просто перевернуть оси x и y:

ggplot(pred_new, aes(y = as.numeric(Site), x = No_cars, color = Road)) + 
  geom_point() + 
  geom_smooth(method = "lm") +
  geom_errorbarh(aes(xmin = No_cars - standerror, xmax = No_cars + standerror)) +
  ylab("Site") + 
  # this will recode your y-axis
  scale_y_continuous(breaks = 1:9, labels = LETTERS[1:9]) +
  facet_wrap(~ Days, scales = "free_x") + 
  theme_classic()

Большое спасибо, Адела! Это в значительной степени именно то, что я искал - однако я надеялся, что Site на оси y - поскольку site совместно используются разными day, тогда как масштаб no_cars различается в зависимости от того, какой day. Если бы я сделал site числовой переменной - можно ли изменить ось Y, чтобы читать разные сайты, а не числа. Спасибо, Эль

Elle Bowd 08.09.2018 01:57

Я добавил в ответ топоры с переворачиванием. Надеюсь это поможет.

Adela 08.09.2018 08:57

Другие вопросы по теме