【问题标题】:R time series multiple lines plotR时间序列多线图
【发布时间】:2020-04-26 05:21:04
【问题描述】:

我有一个非常大的数据集,我想在 R 中使用 plotly 来说明。 我的数据集示例如下所示:

    > new_data_2
# Groups:   newdatum [8]
  date       activity       totaal
  <date>     <fct>          <int>
1 2019-11-21 N11            144
2 2019-09-22 N11            129
3 2019-05-15 N22            117
4 2019-01-23 N22            12
5 2019-07-04 N22            12
6 2019-07-18 N22            12
...

对于每个活动,我想在时间序列图中显示每个日期(日期)的金额(总计)。 不知何故,我在 R 中无法正确使用它。不知何故,我需要对我的活动进行分组以显示,但我无法弄清楚。

new_data_2 %>% 
group_by(activity) %>% 
plot_ly(x=new_data_2$newdatum) %>% 
add_lines(y=~new_data_2$totaal, color = ~factor(newdatum))

它确实显示了一个空图,而不是左侧的“活动”。

我想要实现的是:

【问题讨论】:

  • 请提供一个reprex,你的数据不能在r中轻易使用,尝试使用dput
  • @Dave - 您对任何建议的解决方案有任何帮助吗?

标签: r ggplot2 plotly r-plotly


【解决方案1】:

你在正确的轨道上,但在 group_by() 之后你需要告诉 R 对组做点什么。

new_data_2 %>%
  group_by(activity, date) %>%  # use two groupings since you want by activity & date 
  summarise(totaal_2 = sum(totaal))

这应该会到达您正在寻找的数据框。你可以从那里使用 ggplot & plotly 。

我建议先对数据进行整形(如上),将其保存为新对象,然后绘制图形。这样做可以帮助您了解沿途的每一步。管道%&gt;% 很棒,但会让每一步都难以看到。

【讨论】:

    【解决方案2】:

    一开始这可能不是很明显,但您的数据结构非常适合具有多个时间序列的绘图。您甚至不必担心group_by 函数。您的数据集似乎有一个long format,其中date column 中的日期和activity column 中的名称不是唯一的。但是每个活动和日期只有 一个 变量。

    如果指定正确,plot_ly() 将使用 color=~activity 对您的数据进行分组,如下所示:p &lt;- plot_ly(new_data2, x = ~date, y = ~totall, color = ~activity) %&gt;% add_lines()。由于您没有提供足够大的数据样本,我将使用内置数据集economics_long 向您展示如何做到这一点。首先,注意我的采样数据集的结构与你的匹配:

               date variable value
    1    1967-07-01  psavert  12.5
    2    1967-08-01  psavert  12.5
    3    1967-09-01  psavert  11.7
    4    1967-10-01  psavert  12.5
    5    1967-11-01  psavert  12.5
    6    1967-12-01  psavert  12.1
    ...
    

    剧情:

    代码:

    library(plotly)
    library(dplyr)
    
    # data
    data("economics_long")
    df <- data.frame(economics_long)
    
    # keep only some variables that have values on a comparable level
    df <- df %>% filter(!(variable %in% c('pop', 'pce', 'unemploy')))
    
    # plotly time series
    p <- plot_ly(df, x = ~date, y = ~value, color = ~variable) %>%
      add_lines()
    
    # show plot
    p
    

    【讨论】: