首页 > 解决方案 > ggplot:如何显示显着偏离平均值的时间序列

问题描述

我正在制作一个系统,我们将在其中绘制各个主题随时间的进展。每周测量一次。我可以很容易地绘制出非常细且半透明的各个进度线以及一条相当粗的重叠平均线:

在此处输入图像描述

我通过制作一个数据框来获得平均线,其中观察结果汇总如下mean()

df.avg.feeling <- df.lines.feeling %>%
  dplyr::group_by(date) %>%
  summarise(feeling=mean(feeling))

这适用于大约 10 个,也许是 15 个主题。我们可以看到这条线666666明显不同。但是,如果我有 50 个科目,则很难辨别各个行。该图的目的是捕捉那些明显偏离平均线的数据系列。我的问题是 - 如何制作一个数据框,让我只选择最偏离平均值的 10 个数据系列/行?我只能绘制那些线。我有点看到需要创建一些偏离平均线的分数,以便我可以选择前n 个观察系列。这是正确的,以及如何对时间序列线/数据执行此操作?

数据组织如下:

    date         id    feeling
1   2019-08-08  111111  68
2   2019-08-15  111111  45
3   2019-08-22  111111  60
4   2019-08-29  111111  70
5   2019-09-05  111111  55
...
102 2019-11-21  666666  70
103 2019-11-28  666666  68

当前数据框dput()为:

structure(list(date = structure(c(18116, 18123, 18130, 18137, 
18144, 18151, 18158, 18116, 18123, 18130, 18137, 18144, 18151, 
18158, 18116, 18123, 18130, 18137, 18144, 18151, 18158, 18116, 
18123, 18130, 18137, 18144, 18151, 18158, 18116, 18123, 18130, 
18137, 18144, 18151, 18158, 18116, 18123, 18130, 18137, 18144, 
18151, 18158, 18116, 18123, 18130, 18137, 18144, 18151, 18158, 
18165, 18172, 18179, 18186, 18193, 18200, 18207, 18214, 18221, 
18228, 18235, 18165, 18172, 18179, 18186, 18193, 18200, 18207, 
18214, 18221, 18228, 18235, 18165, 18172, 18179, 18186, 18193, 
18200, 18207, 18214, 18221, 18228, 18235, 18165, 18172, 18179, 
18186, 18193, 18200, 18207, 18214, 18221, 18228, 18235, 18165, 
18172, 18179, 18186, 18193, 18200, 18207, 18214, 18221, 18228, 
18235, 18165, 18172, 18179, 18186, 18193, 18200, 18207, 18214, 
18221, 18228, 18235, 18165, 18172, 18179, 18186, 18193, 18200, 
18207, 18214, 18221, 18228, 18235, 18242, 18242, 18242, 18242, 
18242, 18242, 18243, 18243, 18243, 18243, 18243, 18243), class = "Date"), 
    id = c(111111L, 111111L, 111111L, 111111L, 111111L, 111111L, 
    111111L, 121212L, 121212L, 121212L, 121212L, 121212L, 121212L, 
    121212L, 111333L, 111333L, 111333L, 111333L, 111333L, 111333L, 
    111333L, 131313L, 131313L, 131313L, 131313L, 131313L, 131313L, 
    131313L, 444444L, 444444L, 444444L, 444444L, 444444L, 444444L, 
    444444L, 666666L, 666666L, 666666L, 666666L, 666666L, 666666L, 
    666666L, 777117L, 777117L, 777117L, 777117L, 777117L, 777117L, 
    777117L, 111111L, 111111L, 111111L, 111111L, 111111L, 111111L, 
    111111L, 111111L, 111111L, 111111L, 111111L, 121212L, 121212L, 
    121212L, 121212L, 121212L, 121212L, 121212L, 121212L, 121212L, 
    121212L, 121212L, 111333L, 111333L, 111333L, 111333L, 111333L, 
    111333L, 111333L, 111333L, 111333L, 111333L, 111333L, 131313L, 
    131313L, 131313L, 131313L, 131313L, 131313L, 131313L, 131313L, 
    131313L, 131313L, 131313L, 444444L, 444444L, 444444L, 444444L, 
    444444L, 444444L, 444444L, 444444L, 444444L, 444444L, 444444L, 
    666666L, 666666L, 666666L, 666666L, 666666L, 666666L, 666666L, 
    666666L, 666666L, 666666L, 666666L, 777117L, 777117L, 777117L, 
    777117L, 777117L, 777117L, 777117L, 777117L, 777117L, 777117L, 
    777117L, 111111L, 111111L, 111111L, 111111L, 121212L, 121212L, 
    121212L, 444444L, 131313L, 666666L, 777117L, 111111L), feeling = c(68L, 
    45L, 60L, 70L, 55L, 70L, 75L, 45L, 60L, 62L, 70L, 75L, 65L, 
    71L, 30L, 30L, 65L, 65L, 68L, 74L, 70L, 35L, 20L, 40L, 55L, 
    70L, 65L, 75L, 40L, 48L, 52L, 52L, 60L, 70L, 72L, 55L, 60L, 
    30L, 25L, 10L, 35L, 25L, 52L, 60L, 65L, 60L, 70L, 75L, 85L, 
    70L, 72L, 75L, 80L, 65L, 65L, 60L, 75L, 77L, 80L, 65L, 65L, 
    70L, 72L, 75L, 55L, 52L, 60L, 70L, 78L, 90L, 70L, 65L, 80L, 
    82L, 88L, 75L, 80L, 82L, 90L, 85L, 70L, 69L, 80L, 86L, 70L, 
    65L, 50L, 45L, 30L, 50L, 70L, 75L, 82L, 72L, 82L, 65L, 50L, 
    65L, 70L, 72L, 76L, 70L, 68L, 71L, 45L, 60L, 61L, 48L, 32L, 
    20L, 32L, 42L, 50L, 55L, 45L, 68L, 72L, 79L, 65L, 66L, 67L, 
    69L, 72L, 75L, 78L, 81L, 77L, 70L, 67L, 69L, 85L, 72L, 67L, 
    17L, 62L, 74L, 4L, 24L)), row.names = c(NA, -138L), class = "data.frame")

标签: rdataframeggplot2

解决方案


推荐阅读