【问题标题】:How to add points to multi-panel Lattice graphics bwplot?如何在多面板格子图形 bwplot 中添加点?
【发布时间】:2013-04-05 03:53:31
【问题描述】:

我正在使用 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”被放置在每个图上。在每个面板中,绘图上方 0.5 处都有一个“x”。与在第二个面板中使用 -.5 不同,该过程重新开始 - Lattice 再次抓取第一个点 .5。

如何在不同面板的绘图上显示不同的点?

谢谢。

后来补充:我现在意识到这个问题与+outer=TRUE 本身无关。使用常规格子条件可以得到相同的行为:

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)
           }
          )

【问题讨论】:

  • 不是有一个which.panel 函数在某处吗?如果做不到这一点,请查看?trellis.focus(不仅仅是那个功能,而是整个帮助页面。)
  • 没有which.panel 功能,但?trellis.focus 看起来很有希望。我会进一步调查。谢谢@DWin。
  • which.panel 实际上是 strip.default 中的参数名称。后者的 halp 页面提到 which.packet 作为正确的函数名称。

标签: r lattice


【解决方案1】:

您应该使用访问函数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(...)
           }
)

【讨论】:

  • 谢谢!在进一步思考这个问题时,在查看Creating a Custom Panel Function 之后,我意识到将重叠点的额外数据列表放在面板函数内部会使事情变得不必要地复杂,正如 D.P. 的解决方案所示。 (但panel.number() 似乎非常有用。)这是我喜欢的一个变体——在某些方面更简单,在其他方面更复杂:bwplot(var1 ~ cat | cat2, data=df, panel=function(x, y, ...){panel.bwplot(x, y, ..., pch='|');panel.points(tapply(y, factor(x), FUN = mean), pch=20)})
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多