2013-10-03 82 views
0
##Example data to illustrate problem: 
type=c("grp1","grp2","grp1","grp3","grp3","grp3","grp4") 
num=c(1,1,2,4,3,5,1) 
cols=c(rep("red",5),"green","red") 

library(lattice) 
bwplot(num~type) 
par(new=T) 
stripplot(num~type,col=cols) 

我喜歡box plot顯示的附加信息,但我需要由帶狀圖中彩色點傳達的信息。顯然par(new = T)不起作用,那麼我怎樣才能將這些點疊加到box plot上呢?將條紋點添加到bwplot(R中的格點圖形)

回答

2

可以定義panel功能是這樣的:

library(lattice) 
bwplot(num~type,panel=function(x,y,...){ 
    panel.bwplot(x,y,...) 
    panel.stripplot(x,y,col=cols,...) 
}) 

enter image description here

+0

偉大的作品,謝謝! –

+0

是一個很好的答案,雖然被「bwplot」繪製爲「異常值」的點將被「stripplot」再次繪製。如果對條紋圖使用'jitter.data = TRUE',則看起來有兩次異常值。 – mac

0

由agstudy答案是相當不錯的,但正如我在評論中指出,通過bwplot繪製任何異常值也將是由條紋圖繪製,可能會讓人困惑。

請注意,這只是一個問題,如果您使用jitter.data=TRUE作爲stripplot的選項,否則重複的點會直接疊加在另一個上面,您永遠不會知道它們在那裏。如果數據具有異常值,並且您使用jitter.data=TRUE,則您應該看到兩倍的異常值。

以下方法從bwplot抑制異常值,以避免此問題:

bwstrip <- function(x,y,...){ 
    panel.stripplot(x,y,col=cols,do.out=FALSE,jitter.data=TRUE,...) 
    panel.bwplot(x,y,...) 
} 
bwplot(lobe.depths,panel=bwstrip)