如何在每个组的箱线图中绘制其他统计数据?

时间:2013-08-20 12:34:49

标签: r plot

我想看一下因子组合的框图和I was told to use lattice。我试了一下它看起来像这样:

enter image description here 但现在我还要为每个组添加ANOVA统计数据。可能统计数据应显示每个面板中的p值(例如“澳大利亚”下面的白色)。如何在格子中做到这一点?请注意,我根本不坚持格...

示例代码:

set.seed(123)
n <- 300
country <- sample(c("Europe", "Africa", "Asia", "Australia"), n, replace = TRUE)
type <- sample(c("city", "river", "village"), n, replace = TRUE)
month <- sample(c("may", "june", "july"), n, replace = TRUE)
x <- rnorm(n)
df <- data.frame(x, country, type, month)

bwplot(x ~ type|country+month, data = df, panel=function(...) {
    panel.abline(h=0, col="green")
    panel.bwplot(...)
})

为其中一个组和extract p-value执行ANOVA的代码是:

model <- aov(x ~ type, data = df[df$country == 'Africa' & df$month == 'may',])
p_value <- summary(model)[[1]][["Pr(>F)"]][2]

1 个答案:

答案 0 :(得分:3)

这是使用ggplot2的一种方式。首先,我们可以为每个月/国家/地区组合分别计算p值(我使用data.table。您可以使用任何您喜欢的方式)。然后,我们添加geom_text并指定pvalue作为标签,并指定文本应位于每个方面内的x和y坐标。

require(data.table)
dt <- data.table(df)
pval <- dt[, list(pvalue = paste0("pval = ", sprintf("%.3f", 
        summary(aov(x ~ type))[[1]][["Pr(>F)"]][1]))), 
        by=list(country, month)]

ggplot(data = df, aes(x=type, y=x)) + geom_boxplot() + 
geom_text(data = pval, aes(label=pvalue, x="river", y=2.5)) + 
facet_grid(country ~ month) + theme_bw() + 
theme(panel.margin=grid::unit(0,"lines"), # thanks to @DieterMenne
strip.background = element_rect(fill = NA), 
panel.grid.major = element_line(colour=NA), 
panel.grid.minor = element_line(colour=NA))

enter image description here