假设您具有以下数据集:

trt <- ifelse(runif(100)<0.5,"drug","placebo")
inj.site <- ifelse(runif(100)<0.5,"ankle","wrist")
relief <- 20 + 0.5*(inj.site=="ankle") + 0.5*(trt=="drug") + rnorm(100)
to.analyze <- data.frame(trt,inj.site,relief)

现在,我们的想法是制作一个在x轴上有受伤部位的箱形图,并通过并排处理来制作箱形图:
bplot <- ggplot(to.analyze,aes(inj.site,relief,fill=trt)) + geom_boxplot(position="dodge")

很简单。但是现在我想在框顶部添加原始数据点。如果我没有带position="dodge"的盒子,这将很容易:
bplot + geom_point(aes(colour=trt))

但是,这会在两个框之间绘制点,并且向此几何图形添加position="dodge"似乎不起作用。我该如何调整以便在盒子上画出点?

奖励:使用stat_summary(blah,y.fun=mean,shape="+")过度绘制均值的情况相同,存在相同的问题。

最佳答案

如果我在这里错了,哈德利无疑会纠正我。

这是自然语法:

bplot + geom_point(aes(colour=trt), position=position_dodge(width=.5))

(无需参数,position =“dodge”将执行相同的操作。)

当我绘制它时,我得到的东西看起来像position_jitter(),大概也是你得到的。

很好奇,我去查找源代码,在其中找到了pos_dodge()函数。 (在R提示符下键入pos_dodge以查看它...)这是它的结尾:
within(df, {
  xmin <- xmin + width / n * (seq_len(n) - 1) - diff * (n - 1) / (2 * n)
  xmax <- xmin + d_width / n
  x <- (xmin + xmax) / 2
})

n是数据帧的行数。因此,它看起来像是通过行所索引的分数来回避各个点!因此,第一个点是闪避的width/n,第二个点是闪避的2 * width/n,最后一个点是闪避的n * width/n。

尽管这是您所说的,但这显然不是您的意思。您可能会被困于手动重新创建躲避的箱线图,或者使用其他可视化效果(例如,刻面)?
ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt)

关于r - 将汇总统计信息(甚至原始数据点)添加到躲避的位置箱图中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1484472/

10-12 19:22