2014-05-15 51 views
16

以散点图,我使用下面的命令来产生散点图抖动:如何添加盒状图与抖动

ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5],500,replace=T)) 
library(lattice) 
stripplot(NUMS~GRP,data=ddf, jitter.data=T) 

我想通过这些点(一个为每个组)添加盒形图。我尝试搜索,但我无法找到代码绘制所有点(而不仅仅是异常值)和抖动。我该如何解决这个问题。谢谢你的帮助。

+1

它必须是格吗?否则请尝试像(ddf,{boxplot(NUMS〜GRP); points(jitter(as.numeric(GRP)),NUMS,col = rgb(0,0,0,.2),cex = .5, pch = 19)})'。 – lukeA

+0

使用基础图形是首选。你的解决方案效果很好。谢谢。 – rnso

+0

这可以用ggplot2来完成吗?我尝试过{ggplot(ddf,aes(x = GRP,y = NUM​​S))+ geom_boxplot()+ geom_jitter()},但是它产生太多的散射 - 抖动可能会更小? – rnso

回答

27

以下是使用基础图形的一种方法。

boxplot(NUMS ~ GRP, data = ddf, lwd = 2, ylab = 'NUMS') 
stripchart(NUMS ~ GRP, vertical = TRUE, data = ddf, 
    method = "jitter", add = TRUE, pch = 20, col = 'blue') 

enter image description here

+0

是的,它工作得很好。谢谢。我正在尝试使用boxplot,然后它不起作用。 – rnso

+2

'add = TRUE'参数是关键。 :) –

+0

add = T可能不够,因为{stripplot(NUMS〜GRP,data = ddf,jitter = T); boxplot(NUMS〜GRP,data = ddf,add = T)}不起作用;显然需要首先放置一个“情节”,然后是点或图表。 – rnso

17

ggplot2为此,请尝试:

ggplot(ddf, aes(x=GRP, y=NUMS)) + 
    geom_boxplot(outlier.shape=NA) + #avoid plotting outliers twice 
    geom_jitter(position=position_jitter(width=.1, height=0)) 

ggplot2 version of boxplot + jitter

很明显,你可以调整position_jitter()宽度和高度参数根据自己的喜好(虽然我d建议使用height=0,因为高度抖动会使您的绘图不准确)。