【问题标题】:Add mean to boxplot with different subgroups向具有不同子组的箱线图添加均值
【发布时间】:2015-04-28 09:50:38
【问题描述】:

我想在 subgroub 的平均值处添加一个菱形。 这个函数可以创建样本数据:

sim <- function(ngroups, propsub, mu, sd){
  sample <- list()
  nnames <- names(ngroups)
  for (i in 1:length(ngroups)) { sample[[i]] <- rnorm(ngroups[i], mean = mu[i], sd = sd) }
  sub <- sample(size=sum(ngroups), x=names(propsub), prob=propsub, replace=TRUE)
  dat <- data.frame(trt=factor(rep(nnames,times=ngroups), levels=nnames), y=unlist(sample), sub)
  return(dat) 
}

set.seed(123)
dtest <- sim(ngroups=c("kon"=50,"trt"=50), propsub=c("a"=0.5,"b"=0.5), 
                mu=c(0,0), sd=1)

在此处查看示例数据的头部:

> head(dtest)
  trt           y sub
1 kon -0.56047565   b
2 kon -0.23017749   a
3 kon  1.55870831   a
4 kon  0.07050839   a
5 kon  0.12928774   b
6 kon  1.71506499   a

目前我能达到的最多的是这个情节:

library(ggplot2)
ggplot(data=dtest, aes(y=y, x=trt)) + geom_boxplot(aes(fill=sub)) + stat_summary(fun.y=mean, aes(group = sub), geom="point", shape=5, size=4)

所以有一些钻石,它们的接缝象征着正确的意思,但在错误的位置。 如何更改位置或告诉 R 不仅使用 dtest$trt 作为子组,还使用 ​​dtest$sub

【问题讨论】:

  • 我也使用了 position 参数:ggplot(data=dtest, aes(y=y, x=trt, fill=sub)) + geom_boxplot() + stat_summary(fun.y=mean, geom="point", shape=5, size=4, position = position_dodge(width=0.75)) 但是必须准确说明宽度,它会产生一个错误,提示“ymax 未定义:使用 y 调整位置”。我该如何解决这个问题?

标签: r ggplot2 boxplot


【解决方案1】:

看起来 stat_summary 想要在 trt 中间绘制菱形,geom_boxplot 可以使用填充值将数据一分为二。

这里有一个替代解决方案:

ggplot(data=dtest, aes(y=y, x=paste(trt,sub))) +
  geom_boxplot(aes(fill=sub)) +
  xlab("trt") +
  stat_summary(fun.y=mean, geom="point", shape=5, size=4)

【讨论】:

  • 哦,看起来不错,稍作改动,这对我来说可能是一个不错的替代解决方案:ggplot(data=dtest, aes(y=y, x=trt)) + geom_boxplot(aes(fill=sub)) + xlab("trt") + stat_summary(fun.y=mean, geom="point", shape=5, size=4) + facet_grid(.~sub)
猜你喜欢
  • 2017-10-21
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2019-02-23
相关资源
最近更新 更多