带有stat_summary的ggplot,以天为单位的时间平均值

时间:2019-09-21 07:27:07

标签: r ggplot2

我有这个数据代表随时间变化的变量Q1的值。 时间不以日期表示,而是以自一个事件以来的天数表示。

https://www.mediafire.com/file/yfzbx67yivvvkgv/dat.xlsx/file

我正在尝试绘制Q1沿时间的平均值,例如此处

Plotting average of multiple variables in time-series using ggplot

我正在使用此代码

 library(Hmisc)
    ggplot(dat,aes(x=days,y=Q1,colour=type,group=type)) +
      stat_summary(fun.data = "mean_cl_boot", geom = "smooth")

1 个答案:

答案 0 :(得分:1)

除了该代码(似乎不适用于新的ggplot2版本)之外,您还遇到一个问题,即您的数据确实不适合这种绘图。这段代码实现了您想要做的事情:

dat <- rio::import("dat.xlsx")

library(ggplot2)
library(dplyr)dat %>% 
  ggplot(aes(x = days, y = Q1, colour = type, group = type)) +
  geom_smooth(stat = 'summary', fun.data = mean_cl_boot)

但是该图并没有真正告诉您任何信息,仅是因为您的数据中没有足够的值。多数情况下,每天似乎只有一个值,价目表会快速地上下跳跃,而且几天之间的间隔有时会很大。

将值分组为时间跨度时,您会看到此信息。在这里,我使用了round(days, -2),它将四舍五入到最接近的100(例如756变成800,301变成300,49变成0):

dat %>% 
  mutate(days = round(days, -2)) %>% 
  ggplot(aes(x = days, y = Q1, colour = type, group = type)) +
  geom_smooth(stat = 'summary', fun.data = mean_cl_boot)

这应该与链接相同,但是具有很大的置信区间。这并不奇怪,因为如上所述,值在值1-5之间快速交替。希望对您有所帮助。