2013-10-03 79 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)