R 如何在boxplot中为每组绘制其他统计数据?

R 如何在boxplot中为每组绘制其他统计数据?,r,plot,R,Plot,我希望看到各种因素组合的箱线图。我试过了,结果是这样的: 但现在我想给每个组添加一个方差分析统计数据。统计数据可能应显示每个面板中的p值(在下方的白色区域中,例如“澳大利亚”)。如何在lattice中执行此操作?请注意,我一点也不坚持晶格 示例代码: set.seed(123) n <- 300 country <- sample(c("Europe", "Africa", "Asia", "Australia"), n, replace = TRUE) type <- sa

我希望看到各种因素组合的箱线图。我试过了,结果是这样的:

但现在我想给每个组添加一个方差分析统计数据。统计数据可能应显示每个面板中的p值(在下方的白色区域中,例如“澳大利亚”)。如何在lattice中执行此操作?请注意,我一点也不坚持晶格

示例代码:

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(...)
})
set.seed(123)

n这里有一种使用
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))
require(data.table)

谢谢你,阿伦!但是请告诉我如何删除这个可怕的网格?:)顺便说一句,数据表的使用非常优雅!不知道他们这么优雅!更好:)如果我想完全摆脱它(这样它看起来就不像是来自ggplot:-)顺便说一句,标签的位置是由
x=“river”,y=2.5
-难道没有更灵活/独立于实际坐标的东西吗?#避免丑陋的ggplot阴影:theme\u集(theme\u bw()+theme(panel.margin=grid::unit(0,“line”))您可以使用编写的Theme_集,但也可以全局设置以删除ggplot宣传背景。
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))