我使用了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)))
答案 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
轴添加了一些空间以容纳盒子。这导致