0

所以这一直让我发疯,如果有人能帮忙,我会很高兴的!

我有一个包含 3 列的日期集。每列都填满了日期。每个日期代表社交媒体平台上的帖子。例如,如果在 2012 年 10 月 10 日在 twitter 上发布了 2 个帖子,则该日期将在 twitter 列中记录两次。

我的数据看起来有点像这样

我想在密度图中绘制这些列随时间的分布。

我想要以几个月为单位的时间作为我的 x 轴。

我想要相对频率作为我的 y 轴……就像计算那个月在 Twitter 上发布的帖子数量一样。因此,对于 2012 年 10 月 10 日的推特,它将是 2。

我希望所有分布都在同一个图上,以便我可以比较它们。

到目前为止,我已经尝试了很多事情,但我似乎无法将以上所有内容都放在同一张图上,这让我发疯了!

我在这里制作了密度图:

我制作的密度图

使用以下代码:

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 情节的东西:

示例 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

我已经制作了一个看起来像这样的数据框,但是我尝试过的所有图都已损坏。

如果有人知道如何做到这一点,我将不胜感激!

4

1 回答 1

0

您缺少的步骤是您需要将数据框更改为长格式

假设您的数据框如下所示

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")

在此处输入图像描述

于 2020-05-28T03:01:01.023 回答