2015-03-30 29 views
7

È possibile posizionare la legenda spplot (poligoni spplot) all'interno della della mappa nell'angolo in basso a sinistra, in questo modo?Inserimento personalizzato della legenda spplot nella mappa

enter image description here

Il più vicino che ho potuto ottenere è questo (io non metto i miei dati, mi basta usare i dati di esempio, invece, quindi in questo caso, cercare di posizionare la leggenda nella parte in alto a sinistra della mappa):

data(meuse.grid) 
gridded(meuse.grid)=~x+y 
spplot(meuse.grid[,'dist'], 
    colorkey = list(space = "left", height = 0.5) 
) 

Ma la leggenda è al centro della pagina ed è al di fuori della mappa. Purtroppo, l'argomento colorkey non supporta gli argomenti "bottomleft" o x, y o corner (vedere ?levelplot). Ho anche provato ad usare l'argomento key.space, ma sembra funzionare solo quando si stampa SpatialPoints* ma sembra ignorato per SpatialPolygons* (o SpatialPixelsDataFrame come nell'esempio sopra).

risposta

9

Dal momento che la chiave è un suo proprio, è perfettamente possibile estrarlo dall'oggetto della trama e disegnarlo separatamente dove preferisci.

library(grid) 

# Separate plot and key 
s <- spplot(meuse.grid[,'dist'], 
    colorkey = list(space = "left", height = 0.5) 
) 
key <- draw.colorkey(s$legend[[1]]$args$key) 
s$legend <- NULL # Otherwise we'd get two keys 

# Modify key 
key$framevp$x <- unit(0.15, "npc") 
key$framevp$y <- unit(0.68, "npc") 

# Plot 
s 
grid.draw(key) 

enter image description here

+3

Nizza! L'ho aggiunto agli esempi spplot, se non ti dispiace. –

+0

Niente affatto, contento che ti piaccia! È un po 'un trucco, dal momento che definisce la posizione della chiave dal suo centro rispetto alle dimensioni dell'area del plot, causando la deriva fuori posto se la cifra viene ridimensionata. Una soluzione migliore sarebbe definire la posizione dall'angolo in alto a sinistra con una distanza assoluta dal bordo dell'area del tracciato, ma purtroppo non so come farlo. – Backlin

+0

Grazie Backlin !! Volevo chiederti esattamente su questo - il posizionamento relativo all'angolo in alto a sinistra. Non c'è forse una possibilità come l'argomento 'corner' di' key.space'? – TMS

5

Il problema di complicazione è che, anche se l'argomento colorkey= è trattato molto simile l'argomento legend=, non è così del tutto il supporto la suite completa di opzioni di posizionamento che legend= fa. Mentre le legende possono essere posizionate direttamente a "left", "right", "top", "bottom" e "inside", la trama, colorkey= supporta solo le prime quattro di esse.

Una soluzione abbastanza pulito è quello di estrarre la lista di argomenti colorkey preparato da una chiamata a spplot(), e di passare che in una seconda spplot() chiamata tramite la sua tesi legend=. colorkey= "sa" come preparare un oggetto colorkey e legend= sa come disegnare oggetti arbitrari all'interno di trame, così possiamo combinare i due per ottenere ciò che vogliamo:

library(sp) 
library(grid) 
library(lattice) 
data(meuse.grid) 
gridded(meuse.grid)=~x+y 

## Call spplot() once as a way to construct a list of arguments 
## to draw.color.key 
SP <- spplot(meuse.grid[,'dist'], 
    colorkey = list(space = "left", height = 0.4) 
) 
args <- SP$legend$left$args$key 

## Prepare list of arguments needed by `legend=` argument (as described in ?xyplot) 
legendArgs <- list(fun = draw.colorkey, 
        args = list(key = args), 
        corner = c(0.05,.75)) 

## Call spplot() again, this time passing in to legend the arguments 
## needed to print a color key 
spplot(meuse.grid[,'dist'], colorkey = FALSE, 
     legend = list(inside = legendArgs)) 

enter image description here

Nota:colorkey= La mancanza di supporto per un'opzione "interna" sembra essere meno una scelta di progettazione che solo una questione di autori di pacchetti che non hanno ancora ottenuto l'implementazione del codice richiesto. A riprova di ciò, vedere la documentazione relativa a colorkey=?lattice::levelplot (alla quale si è diretto da `sp :: spplot?):

colorkey: logical specifying whether a color key is to be drawn 
      alongside the plot, or a list describing the color key. The 
      list may contain the following components: 

      ‘space’: location of the colorkey, can be one of ‘"left"’, 
       ‘"right"’, ‘"top"’ and ‘"bottom"’. Defaults to 
       ‘"right"’. 

      ‘x’, ‘y’: location, currently unused 

      ‘corner’: Interacts with x, y; currently unimplemented