2017-03-24 53 views
3

實際上,這個問題包含兩個針對相同行爲的問題。如何將文本添加到rasterVis levelplot中的特定/固定位置

  1. 我怎樣才能在 面板區域添加文字(每個面板不同),以一個固定的位置?我知道panel.textlatticeExtra::layer solution但它使用繪圖區域座標添加文本。對於 實例,即使它們的比例不同,我也希望將文本添加到每個面板的右下角 。

  2. 如何從等級面板面積添加文本? Method explained here要求水平圖有一個plot_01.legend.top.vp區域 添加我沒有的文本和trellis對象之前繪製爲 。此外,我想在下圖 所示的ylab左側添加文字。我在這裏使用了ylab來說明行的含義,但是我需要第二個代表y軸值的ylab。我發現另一個 question這個問題,但它不起作用。

Sample plot

情節上述由raster::stack對象創建和rasterVis::levelplot方法。我同意一個骯髒的解決方案,即使我更喜歡優雅的解決方案。同樣,儘管有上述問題,我願意使用levelplot的其他方法。

+0

不知道它是否會幫助,但在''names.attr' levelplot'允許您爲每個面板分配名稱。例如。 'names = c(「One」,「Two」,「Three」)''和'levelplot(yourstack,names.attr = names)' – GISKid

回答

0

一個非常類似的問題目前正在討論R-sig-Geo,只是看看我在那裏提供的解決方案。這裏是相應的示例代碼,它允許您使用trellis.focus(..., clip.off = TRUE)lattice在格子圖的面板區域內部或外部添加自定義文本註釋。

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() 

rasterVis

您可以在此找到一些更多的信息:

相關問題