Как добавить текст в определенное/фиксированное место в rasterVis levelplot

Фактически, этот вопрос состоит из двух вопросов, направленных на одно и то же поведение.

  1. Как я могу добавить текст (разный для каждой панели) в фиксированное место в области панели? Мне известны panel.text и latticeExtra::layer solution, но добавляет текст с использованием координат области построения. Например, я хочу добавить текст в правый нижний угол каждой панели, даже если их масштабы разные.

  2. Как добавить текст из областей панели levelplot? Описанный здесь метод требует, чтобы levelplot имел область plot_01.legend.top.vp для добавления текста, который У меня нет, а объект trellis уже был нарисован. Кроме того, я хочу добавить текст слева от ylab, как показано на рисунке ниже. Я использовал ylab здесь, чтобы указать значение строк, но мне нужна вторая ylab, которая представляет значения по оси Y. Я нашел еще один вопрос для этой проблемы, но он не работает .

Образец участка

График выше создан с помощью объекта raster::stack и метода rasterVis::levelplot. Я согласен на грязное решение, даже если предпочитаю элегантное. Также, несмотря на вопрос выше, я открыт для других подходов, использующих levelplot.


person Sezen    schedule 24.03.2017    source источник
comment
Не уверен, что это поможет, но names.attr в levelplot позволяет присваивать имена каждой панели. например. names=c("One","Two","Three") и levelplot(yourstack, names.attr=names)   -  person GISKid    schedule 26.04.2017


Ответы (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()

растровый вид

Вы можете найти дополнительную информацию здесь:

person fdetsch    schedule 21.07.2017