Я пытаюсь добавить две линии тренда к данным, нанесенным на мой фасеточный график для двух разных глубин (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")
Спасибо, @JamesJones, впервые задав вопрос!
Попробуйте опубликовать свои данные или минимальный набор данных игрушек, достаточный для воспроизведения проблемы. Одна из возможностей заключается в том, что добавление фасетов означает, что на фасет недостаточно точек для рисования подобранной линии, но трудно сказать, не видя данных.
@ arvi1000 Я добавил данные, пожалуйста, смотрите выше
есть 9 баллов за каждую грань
@ElleBlank: используйте dput(pred_new) для обмена данными. Подробнее здесь stackoverflow.com/questions/5963269/…
Для каждого уровня Days у вас есть только одно наблюдение в каждой категории Road (east или west), и поскольку Site является фактором, не может быть никакой тенденции.
Каков ваш ожидаемый результат?
Спасибо, Адела. Я хотел изобразить тенденцию no_cars на разных сайтах .. есть ли способ обойти это?





Я предполагаю, что вы поменяете топоры местами. Чтобы включить тренд, вам нужны числовые значения для 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, чтобы читать разные сайты, а не числа. Спасибо, Эль
Я добавил в ответ топоры с переворачиванием. Надеюсь это поможет.
Добро пожаловать в SO Elle Blank. Я настоятельно рекомендую вам отформатировать код как код. Это облегчает людям чтение и, следовательно, помогает им помогать вам. Я сделал это за вас в этом вопросе.