Joh*_*son 6 algorithm r ggplot2
假设您有以下数据集:
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)
Run Code Online (Sandbox Code Playgroud)
现在,我们的想法是在x轴上制作一个带有损伤部位的箱线图,并通过并排处理制作盒子:
bplot <- ggplot(to.analyze,aes(inj.site,relief,fill=trt)) + geom_boxplot(position="dodge")
Run Code Online (Sandbox Code Playgroud)
很容易.但现在我想在盒子顶部添加原始数据点.如果我没有盒子position="dodge",这很容易:
bplot + geom_point(aes(colour=trt))
Run Code Online (Sandbox Code Playgroud)
但是,这会在框之间绘制点,并且添加position="dodge"到此几何图形似乎不起作用.如何调整此值以便在框上绘制点?
奖励:使用stat_summary(blah,y.fun=mean,shape="+")过度绘制手段的情况相同,具有相同的问题.
如果我在这里错了,哈德利无疑会纠正我......
这是自然语法:
bplot + geom_point(aes(colour=trt), position=position_dodge(width=.5))
Run Code Online (Sandbox Code Playgroud)
(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
})
Run Code Online (Sandbox Code Playgroud)
n 是数据帧的行数。所以看起来它正在以行索引的分数来躲避各个点!所以第一个点是闪避的 width/n,第二个点是闪避的 2 * width/n,最后一个点是闪避的 n * width/n。
这显然不是你的意思,尽管你是这么说的。您可能会陷入手动重新创建躲避的箱线图,或使用不同的可视化(例如分面)的困境?
ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt)
Run Code Online (Sandbox Code Playgroud)