【问题标题】:Maintain custom tick labels when using `c.trellis`使用 `c.trellis` 时维护自定义刻度标签
【发布时间】:2016-04-27 15:24:38
【问题描述】:

我有两个格子对象,我想使用 latticeExtra 中的c.trellis 组合它们(这两个图可以下载here)。正如您在下面看到的,生成的图继承了第一个图中的刻度标签,而第二个图中的标签被丢弃了。使用c.trellis时是否可以保留不同的y轴刻度标签?

library(latticeExtra)

rsq_plt <- readRDS("rsq.rds")
err_plt <- readRDS("err.rds")

latticeExtra:::c.trellis(rsq_plt, err_plt, layout = c(1, 2))

【问题讨论】:

  • c.trellis 会将您的 2 个格子对象组合成一个 - 带有一组标签等。我建议 print.trellis 显示多个格子对象。尤其参见?print.trellis 中的第一个示例。

标签: r lattice trellis


【解决方案1】:

为了记录,我似乎终于想出了一个合适的解决方案,这要归功于格子图的全面自定义选项。在执行c.trellis 和随后的update 之前禁用上图中的scales(通过scales = list(draw = FALSE);注意文件'rsq.rds' 已在线更改) - 使用自定义y 轴的组合图解决了问题。

## combine plots and increase left padding
plt <- latticeExtra:::c.trellis(rsq_plt, err_plt, layout = c(1, 2))
plt <- update(plt, 
              scales = list(draw = FALSE), 
              par.settings = list(
                layout.widths = list(left.padding = 6, right.padding = 0), 
                layout.heights = list(top.padding = 0, bottom.padding = 0)
              ))

## custom panel.axis
panel.fun <- function(...) {

  # allow to draw labels outside panel
  trellis.par.set("clip", list(panel = "off", strip = "off"))

  # add upper y-axis
  if (panel.number() == 1) {
    panel.axis("left", at = 1, tck = .5, outside = TRUE,
               labels = expression("r"^2))
    panel.abline(v = 1, lty = 3, lwd = 1, col = "red")
    panel.dotplot(lwd = .5, ...)
  }

  # add lower y-axis
  if (panel.number() == 2) {
    panel.axis("left", at = 2:4, outside = TRUE, tck = .5,
               labels = c("MAE", "ME", "RMSE"))
    panel.abline(v = 0, lty = 3, lwd = 1, col = "red")
    panel.dotplot(..., lwd = 0.5)
  }
}

## apply custom axes
update(plt, panel = panel.fun)

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2014-04-10
    • 2020-07-29
    • 2016-01-07
    • 2016-10-27
    • 2016-09-07
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多