0

我正在使用 bwplot 在 Lattice 中制作盒须图。我想为手段加分。我已经想出如何使用panel.points. +但是,当我使用and制作多面板 bwplot 时outer=TRUE,我不知道如何在不同的面板中放置不同的点。此示例说明了我尝试的解决方案的问题,该解决方案不起作用。(为了简单起见,它将“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”被放置在每个图上。在每个面板中,绘图上方 0.5 处都有一个“x”。与在第二个面板中使用 -.5 不同,该过程重新开始 - Lattice 再次抓取第一个点 0.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)
           }
          )
4

1 回答 1

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函数(按照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(...)
           }
)
于 2013-04-04T19:33:28.637 回答