Отображение нескольких линий тренда в ggplot

#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)` — я обновил свой первоначальный ответ