2014-05-15 59 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,因爲高度抖動會使您的繪圖不準確)。