在 ggplot2 中为时间序列数据绘制平均值和置信区间
plotting average with confidence interval in ggplot2 for time-series data
从下面的question,我们创建了一些虚拟数据。然后将其转换为 ggplot2
可以理解的格式,我们生成一个简单的图表,显示 var
随时间的变化。
test_data <-
data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
var2 = 120 + c(0, cumsum(runif(49, -5, 10))),
date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
)
#
library("reshape2")
library("ggplot2")
#
test_data_long <- melt(test_data, id="date") # convert to long format
ggplot(data=test_data_long,
aes(x=date, y=value, colour=variable)) +
geom_line() + theme_bw()
我想在同一张图中绘制三个 var
的平均值,并显示平均值的置信区间。 可能带有 +-1SD。为此,我认为可以使用 stat_summary()
函数,正如 here and here 所概述的那样。
通过添加以下任一命令,我没有获得平均值,也没有获得置信区间。任何建议将不胜感激。
stat_summary(fun.data=mean_cl_normal)
#stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth")
#stat_summary(fun.data = "mean_cl_boot", geom = "smooth")
如果我没理解错的话,您想显示所有三个参数(var0、var1 和 var3)的平均值和标准差。
我确实有两个解决方案。第一个暗示 dplyr
包装和计算 标准偏差和平均行 并使用 geom_ribbon()
:
进一步显示
library(dplyr)
library(magrittr)
q <- test_data
q <- q %>% rowwise() %>% transmute(date, mean=mean(c(var0,var1,var2), na.rm=TRUE), sd = sd(c(var0,var1,var2), na.rm=TRUE))
eb <- aes(ymax = mean + sd, ymin = mean - sd)
ggplot(data = q, aes(x = date, y = mean)) +
geom_line(size = 2) +
geom_ribbon(eb, alpha = 0.5)
您 stat_summary()
暗示的第二种解决方案,它实际上与您提供的代码配合得很好:
ggplot(data=test_data_long, aes(x=date, y=value)) +
stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth") + theme_bw()
从下面的question,我们创建了一些虚拟数据。然后将其转换为 ggplot2
可以理解的格式,我们生成一个简单的图表,显示 var
随时间的变化。
test_data <-
data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
var2 = 120 + c(0, cumsum(runif(49, -5, 10))),
date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
)
#
library("reshape2")
library("ggplot2")
#
test_data_long <- melt(test_data, id="date") # convert to long format
ggplot(data=test_data_long,
aes(x=date, y=value, colour=variable)) +
geom_line() + theme_bw()
我想在同一张图中绘制三个 var
的平均值,并显示平均值的置信区间。 可能带有 +-1SD。为此,我认为可以使用 stat_summary()
函数,正如 here and here 所概述的那样。
通过添加以下任一命令,我没有获得平均值,也没有获得置信区间。任何建议将不胜感激。
stat_summary(fun.data=mean_cl_normal)
#stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth")
#stat_summary(fun.data = "mean_cl_boot", geom = "smooth")
如果我没理解错的话,您想显示所有三个参数(var0、var1 和 var3)的平均值和标准差。
我确实有两个解决方案。第一个暗示 dplyr
包装和计算 标准偏差和平均行 并使用 geom_ribbon()
:
library(dplyr)
library(magrittr)
q <- test_data
q <- q %>% rowwise() %>% transmute(date, mean=mean(c(var0,var1,var2), na.rm=TRUE), sd = sd(c(var0,var1,var2), na.rm=TRUE))
eb <- aes(ymax = mean + sd, ymin = mean - sd)
ggplot(data = q, aes(x = date, y = mean)) +
geom_line(size = 2) +
geom_ribbon(eb, alpha = 0.5)
您 stat_summary()
暗示的第二种解决方案,它实际上与您提供的代码配合得很好:
ggplot(data=test_data_long, aes(x=date, y=value)) +
stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth") + theme_bw()