R-使用ggplot2在线图中绘制不同时间序列的滚动平均值

时间:2018-07-29 11:45:41

标签: r ggplot2 zoo

我想用>>> with open('labelmap_coco.prototxt') as f: ... d = literal_eval(f) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> File "/usr/lib/python2.7/ast.py", line 80, in literal_eval return _convert(node_or_string) File "/usr/lib/python2.7/ast.py", line 79, in _convert raise ValueError('malformed string') ValueError: malformed string 绘制不同时间序列的数据的滚动平均值。我的数据具有以下结构:

ggplot2

现在,下面的代码创建了一个情节,其中朝向情节开头的时间= 1和时间= 2的线不代表数据,因为library(dplyr) library(ggplot2) library(zoo) library(tidyr) df <- data.frame(episode=seq(1:1000), t_0 = runif(1000), t_1 = 1 + runif(1000), t_2 = 2 + runif(1000)) df.tidy <- gather(df, "time", "value", -episode) %>% separate("time", c("t", "time"), sep = "_") %>% subset(select = -t) > head(df.tidy) # episode time value #1 1 0 0.7466480 #2 2 0 0.7238865 #3 3 0 0.9024454 #4 4 0 0.7274303 #5 5 0 0.1932375 #6 6 0 0.1826925 充满了NA,并且{ {1}}表示时间= 0。

value

Plot result

我该如何调整我的代码,使滚动平均值线代表我的数据?

1 个答案:

答案 0 :(得分:2)

您的问题是您正在对整个列应用移动平均值,这会使数据从time的一个值“泄漏”到另一个值。

您可以先group_byrollmean分别应用于每次:

ggplot(df.tidy, aes(x = episode, y = value, col = time)) +
  geom_point(alpha = 0.2) + 
  geom_line(data = df.tidy %>%
              group_by(time) %>%
              mutate(value = rollmean(value, 10, align = "right", fill = NA)))

enter image description here