如何为多面板Lattice图形bwplot添加点?

时间:2013-04-04 05:26:19

标签: r lattice

我正在使用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=Tvar1 + 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)
           }
          )

1 个答案:

答案 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(...)
           }
)