Сохранение пользовательских меток при использовании `c.trellis`
У меня есть два объекта решетки, которые я хотел бы объединить, используя c.trellis
из latticeExtra (две цифры можно скачать здесь). Как вы можете видеть ниже, результирующий график наследует метки от первого рисунка, тогда как метки от второго рисунка отбрасываются. Можно ли сохранить разные метки оси Y при использовании c.trellis
?
library(latticeExtra)
rsq_plt <- readRDS("rsq.rds")
err_plt <- readRDS("err.rds")
latticeExtra:::c.trellis(rsq_plt, err_plt, layout = c(1, 2))
1 ответ
Решение
Просто для справки, похоже, что я наконец-то нашел правильное решение благодаря всесторонним настройкам параметров для решетчатых участков. Отключение scales
на верхнем участке (через scales = list(draw = FALSE)
; обратите внимание, что файл "rsq.rds" был изменен в Интернете) до выполнения c.trellis
и впоследствии update
- объединенный сюжет с настроенными осями 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)