2017-03-24 3 views
3

En fait, cette question est composée de deux questions visant le même comportement.Comment ajouter du texte à un emplacement spécifique/fixe dans rasterVis levelplot

  1. Comment puis-je ajouter du texte (varie selon chaque panneau) à un emplacement fixe dans zone du panneau? Je suis au courant de panel.text et latticeExtra::layer solution mais il ajoute du texte en utilisant les coordonnées de la zone de traçage. Pour l'instance , je souhaite ajouter du texte dans le coin inférieur droit de chaque panneau même si leurs échelles sont différentes.

  2. Comment ajouter du texte hors de la (des) zone (s) du panneau de niveau? Method explained here nécessite que levelplot a une zone pour ajouter un texte que je n'ai pas et l'objet trellis a été tracé avant. En outre, je veux ajouter le texte à gauche de ylab montré dans la figure ci-dessous. J'ai utilisé ylab ici pour indiquer la signification des lignes mais I besoin d'un second ylab qui représente les valeurs de l'axe des y. J'ai trouvé un autre question pour ce problème mais cela ne fonctionne pas.

Sample plot

La courbe ci-dessus est créé par raster::stack objet et un procédé rasterVis::levelplot. Je consens à une solution sale même si je préfère une solution élégante. Aussi, malgré la question ci-dessus, je suis ouvert à d'autres approches qui utilisent levelplot.

+0

Je ne sais pas si cela peut aider, mais '' names.attr' dans levelplot' vous permet d'attribuer des noms à chaque panneau. par exemple. 'names = c (" One "," Two "," Three ")' et 'levelplot (yourstack, names.attr = noms)' – GISKid

Répondre

0

Une question très similaire est actuellement discutée sur R-sig-Geo, jetez un oeil à la solution que j'ai fournie ici. Voici l'exemple de code correspondant qui vous permet d'ajouter des annotations de texte personnalisées à l'intérieur ou à l'extérieur des zones de panneau d'un graphe en treillis en utilisant trellis.focus(..., clip.off = TRUE) de treillis.

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

Vous trouverez peut-être un peu plus d'informations ici: