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))
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
Nizza! L'ho aggiunto agli esempi spplot, se non ti dispiace. –
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
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