假设您有以下数据集:
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="+")
覆盖手段的情况相同,具有相同的问题。
答案 0 :(得分:3)
这是自然语法:
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是数据帧的行数。因此看起来它正在通过行索引的一小部分来避开各个点!所以第一个点是躲避宽度/ n,第二个点是躲避2 *宽度/ n,最后一个是躲避n * width / n。
这显然不是你的意思,虽然它是你所说的。您可能会卡住重建手动躲避的箱图,或者使用不同的可视化,例如刻面?
ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt)