在R中的bwplot顶部绘制框

时间:2014-07-14 19:59:51

标签: r

我使用了here中的一些想法。我想在格子顶部画一个方框bwplot

我想在格子bwplot上结合boxplot提供的解决方案。理想的纯格子bwplot解决方案。

示例数据:

rdata <- data.frame(y=rnorm(1000,2,2),v1=rnorm(1000,1,1),v2=rnorm(1000,3,3),
                      v3=rnorm(1000,4,4),v4=rnorm(1000,5,5),v5=rnorm(1000,3,3))

我想在bwplot之上绘制一个方框,这是一个箱线图解决方案:

 p <- par(mfrow=c(3,2))
  for(i in 1:6){
    boxplot(rdata[,i],horizontal=TRUE,axes=FALSE)
    rect(min(rdata[,i]),1.5,quantile(rdata[,i],0.25),1.4,col="red")
    rect(quantile(rdata[,i],0.25),1.5,quantile(rdata[,i],0.60),1.4,col="green")
    rect(quantile(rdata[,i],0.60),1.4,max(rdata[,i]),1.5,col="yellow")
  }
  par(p)

如何在格子bwplot内做同样的事情?有可能吗?谢谢!

只是为bwplot提供一些起点:

library(lattice)
library(gridExtra)    
plot1 <- lapply(1:2, function(i) {bwplot(~rdata[,i],rdata)})
plot2 <- lapply(1:3, function(i) {bwplot(~rdata[,i],rdata)})
plot3 <- lapply(1:4, function(i) {bwplot(~rdata[,i],rdata)})

print(do.call(grid.arrange, c(plot1,plot2,plot3)))

1 个答案:

答案 0 :(得分:2)

在这里,我们可以创建一个帮助功能,可以生成一个面板功能,我们可以使用它来将彩色框添加到方框图

getPanelBoxCol<-function(cuts, colors=c("red","green","yellow"), yat=1.5) {
    require(grid)
    cuts<-sort(unique(c(0, cuts, 1)))
    function(x, y, ...) {
        xbr <- quantile(x, cuts)
        xx<-rowMeans(embed(xbr,2))
        yy<-rep(yat, 3)
        grid.rect(x=xx,
            y=yy, 
            width=diff(xbr),
            height=.1,
            gp=gpar(fill=colors),
            default.units="native"
        )
    }
}

然后我们可以为我们想要的切割点创建一个。

panel.boxcol<-getPanelBoxCol( c(0, .25, .6, 1) )

然后我们可以在bwplot面板功能

中使用它
rdata<-data.frame(
    y=rnorm(100,2,2)
)
bwplot(~y,rdata, 
    prepanel=function(x,y,...) {
        list(ylim=c(.5, nlevels(y)+.6), xlim=lattice:::scale.limits(x))
    }, 
    panel=function(x,y,...) {
        panel.bwplot(x,y,...)
        panel.boxcol(x,y,...)
    },
    scales=list(y=list(draw=F))
)

在这里,我们还为y轴添加了一些空间以容纳盒子。这导致

enter image description here