R时间序列多线图

时间:2020-01-08 16:12:17

标签: r ggplot2 plotly r-plotly

我有一个非常大的数据集,我想说明在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))

它确实显示了一个空图,但左侧没有“活动”。

我想要实现的是:

this image

2 个答案:

答案 0 :(得分: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。

我建议先重塑数据(如上所述),将其保存为新对象,然后再对其进行图形处理。这样做可以帮助您了解整个过程中的每个步骤。管道%>%很不错,但是会使每个步骤都难以看清。

答案 1 :(得分:0)

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

给出正确的规范,plot_ly()将使用color=~activity对数据进行分组,如下所示:p <- plot_ly(new_data2, x = ~date, y = ~totall, color = ~activity) %>% 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
...

情节:

enter image description here

代码:

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