Есть ли способ в R наложить 3 графика плотности со временем на ось x и считать осью y? - PullRequest
0 голосов
/ 28 мая 2020

так что это сводит меня с ума, и я был бы рад, если бы кто-нибудь мог помочь!

У меня есть набор дат с 3 столбцами. Каждый столбец заполнен датами. Каждая дата представляет собой сообщение в социальной сети. Например, если 10 октября 2012 г. в твиттере было опубликовано 2 сообщения, эта дата будет дважды записана в столбце твиттера.

My data looks a bit like this

Я хочу построить график распределения каждый из этих столбцов с течением времени на графике плотности.

Мне нужно время в месяцах в качестве оси x.

Мне нужна относительная частота в качестве оси Y .... в тот месяц в твиттере было много сообщений. Так что для твиттера 2012-10-10 это будет 2.

И я хочу, чтобы все дистрибутивы были на одном участке, чтобы я мог их сравнивать.

На данный момент я перепробовал миллионы вещей. , но я не могу представить все вышеперечисленное на одном графике, и это сводит меня с ума!

У меня есть графики плотности здесь:

A density plot I made

используя следующий код:

social_media_dates %>%
               ggplot( aes(x =`Facebook_dates`)) +
               geom_density(fill="#69b3a2", color="#e9ecef", alpha=0.8)+
               theme_bw()+
               scale_x_date(labels = date_format("%Y-%m"), breaks = date_breaks("3 months"), limits = c(as.Date("2016-12-01"), as.Date("2020-05-20"))) +
               labs(title = "Facebook posts over time")+
               xlab("month")+
               ylab("density")

Но: я не знаю, как] a) изменить ось y на количество постов b) объединить 3 графика на одном графике с та же ось

В идеале я бы хотел что-то похожее на графики ggridges:

example ggridges

Или просто все 3 кривые на одном графике.

Я использую ggplot и Rstudio для справки.

Я пробовал кучу вещей, но они продолжают терпеть неудачу! Я думаю о том, чтобы иметь столбец «дата» со всеми возможными датами на графике и сделать его моей осью x. Затем подсчитываем количество постов за каждый день в столбце подсчета.

Например.

date | facebook_count | twitter_count | instagram_count

2018-02-01 | 3 | 4 | 10

2018-02-02 | 4 | 8 | 2

2018-02-03 | NA | 4 | 6

Я создал фрейм данных, который выглядит так, но все графики, с которыми я его пробовал, сломались.

Если кто знает, как это сделать, я был бы очень благодарен!

1 Ответ

0 голосов
/ 28 мая 2020

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

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

library(tidyverse)
library(scales)

df <- data.frame(fb= lubridate::ymd(c("2020-01-01","2020-01-02","2020-01-03", "2020-01-03")),
                      twi = lubridate::ymd(c("2020-01-05","2020-01-05","2020-01-6", "2020-01-09")),
                      insta = lubridate::ymd(c("2020-01-01","2020-01-02","2020-01-05", "2020-01-05"))
                      )

теперь измените фрейм данных на длинный формат :

df_long <- df %>% pivot_longer(everything())

и это можно построить

df %>% ggplot( aes(x =value, color=name, fill= name)) +
  geom_density( alpha=0.8)+
  theme_bw()+
  scale_x_date(labels = date_format("%Y-%m"), 
               breaks = date_breaks("3 months")) +
  labs(title = "Posts over time")+
  xlab("month")+
  ylab("density")

enter image description here

...