2009-09-27 17 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