2009-09-27 15 views
6

假设你有以下数据集:现在添加汇总统计(甚至原始数据点),以回避位置箱线图

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

浮雕< - 20 + 0.5 *(inj.site ==脚踝)+ 0.5 *(TRT == “药物”)+ RNORM(100) 应该是: 浮雕< - 20 + 0.5 *(inj.site ==“ankle”)+ 0.5 *(trt ==“drug”)+ rnorm(100) – Paolo 2009-09-28 10:17:45

+0

呃,是的,固定的。 – 2009-09-28 12:53:04

回答

3

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

这里是自然的语法:

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

(位置=“道奇”会做同样的事情,如果没有参数。 )

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

好奇,我去看看源代码,在那里找到了pos_dodge()函数。 (键入pos_dodge在的R提示看它...)这里的它的结束:

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 *宽度/ n。

这显然不是你的意思是,虽然它是你说的。您可能会被卡住手动重新创建躲闪的箱子图,或使用不同的可视化,例如刻面?

ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt) 
+0

在面,它完美的作品。然而,为了形象化原因,我宁愿躲避位置,尽管我可能会尝试在inj.site上打分? – 2009-09-27 22:03:53