#r #ggplot2 #trendline
#r #ggplot2 #линия тренда
Вопрос:
У меня есть таблица следующего вида,
id | membership | month | year | numberofXPurchased
---------- ------------ ------------ ------------ -------------------
1 | 05 | 02 | 2014 | 5
1 | 06 | 03 | 2014 | 7
1 | 07 | 04 | 2014 | 3
2 | 01 | 11 | 2014 | 2
2 | 02 | 12 | 2014 | 1
2 | 03 | 01 | 2015 | 4
Я создал линейный график с помощью ggplot, чтобы определить корреляцию между периодом членства и количеством приобретенных X раз
ggplot(data = df, aes (x = memberMonths, y=numberofXPurchased, group=id, color = id))
geom_line()
geom_point()
theme(legend.position = "none")
labs(y="Membership in Months", x = "X purchased")
Это создает линейный график, как и ожидалось, но поскольку у меня более 100000 строк данных, график не поддается интерпретации. Поэтому я пытаюсь отображать только линии тренда вместо линий, представляющих каждый идентификатор, где 1 линия тренда представляет весь график, и набор линий тренда для каждого «года» (возможно, на другом графике).
Добавление
stat_smooth( method="lm") or
geom_smooth(method = "lm")
Добавляет только линию тренда к существующему графику, но я хочу линию тренда вместо данных из df
Есть ли эффективный способ сделать это, заранее спасибо
Комментарии:
1. Не могли бы вы добавить больше данных (репрезентативный набор данных) с помощью
dput
функции?
Ответ №1:
Вы можете использовать geom_smooth() с опцией ‘lm’, которая дает линейную модель
geom_smooth(method = "lm")
Покажите, как будет выглядеть ваш код..
ggplot(data = df, aes (x = memberMonths, y=numberofXPurchased,group=id, color = id))
geom_smooth(method = "lm")
geom_point()
theme(legend.position = "none")
labs(y="Membership in Months", x = "X purchased")
Как представляется geom_smooth()
, необходимо geom_point()
указать правильную линию тренда, которую я бы использовал alpha=0
в geom_point()
вызове.
ggplot(data = df, aes (x = memberMonths, y=numberofXPurchased,group=id, color = id))
geom_smooth(method = "lm")
geom_point(alpha=0)
theme(legend.position = "none")
labs(y="Membership in Months", x = "X purchased")
Комментарии:
1. Это добавит новую линию к существующему графику, я не хочу отображать существующие точки на графике, а только линии тренда (поскольку существующие линии не поддаются интерпретации из-за большого объема)
2. Отредактировал вопрос, чтобы сделать мое требование более понятным
3. Это тот
geom_point()
, который добавляет точки для каждой точки данных. Итак, ваш код был в порядке, просто не включайте функцию geom_point(). ggplot накапливается, поэтому, если вы чувствуете, что его слишком много, удалите части 🙂4. Поправьте меня, если я ошибаюсь, но, насколько я понимаю, функция geom_smooth / stat_smooth сглаживает точки для создания линии тренда, поэтому без geom_line и geom_point она не обеспечит правильную линию тренда. Я протестировал это и получил неправильную линию тренда,
5. Я не уверен, насколько это согласованно, в любом случае вы можете просто установить непрозрачность
geom_point()
функции равной 0, которая является ‘geom_point (alpha = 0)` — я обновил свой первоначальный ответ