Как добавить текст в определенное / фиксированное место в rasterVis levelplot
На самом деле, этот вопрос состоит из двух вопросов, направленных на одно и то же поведение.
Как добавить текст (зависит от каждой панели) в фиксированное место в области панели? Я в курсе
panel.text
а такжеlatticeExtra::layer
решение, но он добавляет текст, используя координаты области построения. Например, я хочу добавить текст в правый нижний угол каждой панели, даже если их масштабы отличаются.Как добавить текст из области (ов) панели уровня? Метод, описанный здесь, требует, чтобы у levelplot был
plot_01.legend.top.vp
область для добавления текста, которого у меня нет, иtrellis
Объект был построен ранее. Кроме того, я хочу добавить текст слева отylab
показано на рисунке ниже. я использовалylab
здесь, чтобы указать значение строк, но мне нужен второй ylab, который представляет значения оси Y. Я нашел другой вопрос для этой проблемы, но он не работает.
Сюжет выше создан raster::stack
объект и rasterVis::levelplot
метод. Я согласен на грязное решение, даже если я предпочитаю элегантное. Также, несмотря на вопрос выше, я открыт для других подходов, которые используют levelplot
,
1 ответ
Очень похожая проблема в настоящее время обсуждается на R-sig-Geo, просто взгляните на решение, которое я там предоставил. Вот соответствующий пример кода, который позволяет добавлять пользовательские текстовые аннотации внутри или снаружи областей панели решетчатого графа, используя trellis.focus(..., clip.off = TRUE)
из решетки.
library(rasterVis)
library(grid)
## sample data
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
s <- stack(r, r+500, r-500, r+200)
p <- levelplot(s, layout = c(2, 2), names.att = rep("", 4),
scales = list(y = list(rot = 90)))
## labels
cls <- c("col1", "col2")
rws <- c("row1", "row2")
png("~/rasterVis.png", width = 14, height = 16, units = "cm", res = 300L)
grid.newpage()
print(p, newpage = FALSE)
## loop over panels to be labelled (ie 1:3)
panels = trellis.currentLayout()
for (i in 1:3) {
# focus on current panel of interest and disable clipping
ids <- which(panels == i, arr.ind = TRUE)
trellis.focus("panel", ids[2], ids[1], clip.off = TRUE)
# add labels
if (i %in% c(1, 3)) {
if (i == 1) {
grid.text(cls[1], x = .5, y = 1.1) # add 'col1'
grid.text(rws[1], x = -.35, y = .5, rot = 90) # add 'row1'
} else {
grid.text(rws[2], x = -.35, y = .5, rot = 90) # add 'row2'
}
} else {
grid.text(cls[2], x = .5, y = 1.1) # add 'col2'
}
trellis.unfocus()
}
dev.off()
Вы можете найти дополнительную информацию здесь: