我使用以下示例数据和代码
# Example
x1<- as.Date("2013-12-31")
adddate1 <- 1:60
dts <- x1 + adddate1
df <- data.frame(a=runif(100),b=runif(100),c=runif(100) ,d=rnorm(2700), dates=dts)
df$Metric <- ifelse(df$a > 0.5,"a", "b")
df$Methodology <- ifelse(df$a > 0.5,"One", "Two")
df$Methodology <- factor(df$Methodology)
pl<-df %>%
group_by(Methodology) %>%
do(
plots = ggplot(data=., aes(x = dates, y = b)) +
geom_point() +
stat_smooth(method="auto",size=1.5) +
stat_summary(fun.data=median_hilow, fun.args=(conf.int=1)) + # Show IQR
scale_x_date(date_breaks = "1 week", date_labels = "%d-%b-%y") +
facet_wrap(~Metric, scales="free") +
ggtitle(unique(.$Methodology))
)
pl[[1,2]]
我看到的输出是:
但是,我希望看到由stat_summary
或某些此类例程计算的IQR,显示为带状图,以及显示中值的线。
我怀疑我必须编写用户定义的函数并使用它。
感谢任何提示或提示。
答案 0 :(得分:7)
您可以将stat_summary
与geom = "smooth"
一起使用(反之亦然,如果您愿意):
library(ggplot2)
set.seed(47)
df <- data.frame(a = runif(100),
b = runif(100),
c = runif(100),
d = rnorm(2700),
dates = as.Date("2013-12-31") + 1:60)
df$Metric <- ifelse(df$a > 0.5, "a", "b")
df$Methodology <- factor(ifelse(df$a > 0.5, "One", "Two"))
ggplot(df, aes(x = dates, y = b)) +
geom_point() +
stat_smooth(size = 1.5) +
stat_summary(geom = 'smooth', alpha = 0.2, fill = 'red', color = 'red',
fun.data = median_hilow, fun.args = list(conf.int = 1)) +
scale_x_date(date_breaks = "1 week", date_labels = "%d-%b-%y") +
facet_wrap(~ Methodology + Metric, ncol = 1)
#> `geom_smooth()` using method = 'gam'
从conf.int = 1
开始,这会在每个x值的最小值和最大值之间绘制一条色带,中间值为线条。如果您确实要绘制第25和第75百分位数,请设置conf.int = 0.5
。根据这些数据,每个x值的观测值不足以使其看起来非常不同,所以在一些新的样本数据上,
library(ggplot2)
set.seed(47)
ggplot(tibble::data_frame(x = rep(seq(0, 4*pi, length.out = 50), 50),
y = rnorm(2500) * sin(x) + sin(x)),
aes(x, y)) +
geom_point(alpha = 0.1) +
geom_smooth(fill = 'darkblue') +
stat_summary(fun.data = median_hilow, fun.args = list(conf.int = 0.5),
geom = 'smooth', color = 'red', fill = 'red', alpha = 0.2)
#> `geom_smooth()` using method = 'gam'
median_hilow
(真Hmisc::smedian.hilow
)不允许您设置分位数的类型,因此为了更精确的控制,重写函数(返回类似结构的数据框)或单独传递每个统计信息的函数都包含fun.y
,fun.ymin
和fun.ymax
参数。
答案 1 :(得分:0)
R或ggplot 2中的某些内容已更改,但是stat_summary()不再与geom ='smooth'选项一起使用。它必须是geom ='ribbon'。可以按照R 3.6.0和ggplot 3.1.1中的说明进行操作
library(ggplot2)
set.seed(47)
ggplot(tibble::data_frame(x = rep(seq(0, 4*pi, length.out = 50), 50),
y = rnorm(2500) * sin(x) + sin(x)),
aes(x, y)) +
geom_point(alpha = 0.1) +
geom_smooth(fill = 'darkblue') +
stat_summary(fun.data = median_hilow, fun.args = list(conf.int = 0.5),
geom = 'ribbon', color = 'red', fill = 'red', alpha = 0.2)