我正在使用bwplot在Lattice中制作盒子和胡须。我想为手段添加积分。我已经找到了如何使用panel.points
为简单的图表执行此操作。但是,当我使用+
和outer=TRUE
制作多面板bwplot时,我不知道如何在不同的面板中放置不同的点。此示例说明了我尝试的解决方案的问题,该问题无效。 (为简单起见,它将“x”放在任意点而不是平均值。)
# make some data:
df <- data.frame(var1=rnorm(20), var2=runif(20), cat=rep(c("Z"),20))
# cat isn't doing anything, but I couldn't get the mwe to work without it.
bwplot(var1 + var2 ~ cat, data=df, pch="|", coef=0, outer=TRUE,
panel=function(data, ...){
panel.bwplot(...)
panel.points(x=c(.5,-.5), pch="x", cex=2)
}
)
(outer=T
与var1 + var2
相结合是导致创建两个面板的原因。有关更简单的示例,请参见下文。)
我得到的是两个面板,每个面板都有一个盒子和须状图。 “x”被放置在每个图上。在每个面板中,在图上方有一个“x”.5。而不是在第二个面板中使用-.5,过程重新开始 - 莱迪思再次抓住第一个点,.5。
如何在不同面板的图上显示不同的点?
感谢。
后来补充:我现在意识到这个问题与+
和outer=TRUE
本身无关。使用常规的Lattice调节可以获得相同的行为:
df <- data.frame(var1=rnorm(20), cat=rep("Z",20), cat2=rep(c("M","F"), 10))
bwplot(var1 ~ cat | cat2, data=df, pch="|", coef=0, outer=TRUE,
panel=function(data, ...){
panel.bwplot(...)
panel.points(x=c(.5,-.5), pch="x", cex=2)
}
)
答案 0 :(得分:2)
您应该使用访问者函数panel.number()
为每个面板选择x
值:
df <- data.frame(var1=rnorm(20), cat=rep("Z",20), cat2=rep(c("M","F"), 10))
bwplot(var1 ~ cat | cat2, data=df, pch="|",
panel=function(...){
panel.bwplot(...)
panel.points(x=c(.5,-.5)[panel.number()],
pch="x", cex=2)
}
)
已编辑:但是,如果您想为平均值添加点数,则实际上并不需要panel.number
。您可以定义panel.mean
函数(在example by Deepayan之后)来计算和绘制它们:
panel.mean <- function(x, y, ...) {
tmp <- tapply(y, factor(x), FUN = mean)
panel.points(tmp, pch = 20, ...)
}
bwplot(var1 ~ cat | cat2, data=df,
panel=function(...){
panel.bwplot(..., pch='|')
panel.mean(...)
}
)