【问题标题】:Is it possible to update a lattice panel in R?是否可以在 R 中更新晶格面板?
【发布时间】:2011-10-04 14:47:23
【问题描述】:

trellis plots 的update 方法允许在第一次调用后修改lattice plot。但是update 的行为更像是替换而不是追加。这与ggplot2 习惯用法不同,其中每个新层都是对已经存在的内容的添加。是否可以使用lattice 获得这种附加行为?

一个例子:

LL <- barchart(yield ~ variety | site, data = barley,
        groups = year, stack = TRUE,
        between=list(y=0.5),
        scales = list(x = list(rot = 90)))
print(LL)

现在我想将panel.text 添加到现有绘图中。按以下方式使用update 不起作用:

update(LL, panel=function(...){
           args <- list(...); panel.text(args$x, args$y+2, round(args$y, 0))
         })

我知道我可以通过在面板函数中指定所有层来使用update

update(LL, panel=function(...){
           args <- list(...)
           panel.barchart(...)
           panel.text(args$x, args$y+2, round(args$y, 0))
         })

这会起作用,但需要我知道 lattice 图中已经存在的内容 - 或者我需要大量重构我的代码。

问题:有没有办法添加到update.trellis中的现有面板?

【问题讨论】:

    标签: r plot lattice


    【解决方案1】:

    参见latticeExtra 包中的layer

    library(lattice)
    library(latticeExtra)
    LL <- barchart(yield ~ variety | site, data = barley,
            groups = year, stack = TRUE,
            between=list(y=0.5),
            scales = list(x = list(rot = 90)))
    LL + layer(panel.text(x, y, round(y, 0), data=barley))
    

    【讨论】:

    • +1 获得有用的提示(以及修复我的代码中缺少的 90!)
    • 有趣的是:如果你还在同一个会话中加载ggplot2,ggplot layer 函数将隐藏格layer。所以我需要将此函数称为LL + latticeExtra::layer(...)
    【解决方案2】:

    这是一种不用latticeExtra 的方法。不可否认,它比latticeExtra 路线更复杂和困难。但是,这种trellis.focus 方法的灵活性在其他情况下可能更有用。

    barchart(yield ~ variety | site, data = barley,
                   groups = year, stack = TRUE,
                   between=list(y=0.5),
                   scales = list(x = list(rot = 90)))
    
    panels  = trellis.currentLayout()
    for( i in seq_along(panels) ) {
      ind = which( panels == i, arr.ind=TRUE )
      trellis.focus("panel",ind[2],ind[1])
      vars = trellis.panelArgs()
      panel.text(vars$x,vars$y,round(vars$y,0))
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多