Problem komplikuje tutaj jest to, że chociaż colorkey=
argumentem traktowany jest bardzo podobny do legend=
argumentu, to nie dość wsparcie pełny zestaw opcji pozycjonowania że legend=
robi. Podczas gdy legendy można umieścić bezpośrednio pod "left"
, "right"
, "top"
, "bottom"
i "inside"
działka, colorkey=
obsługuje tylko pierwsze cztery z nich.
Dość czystym rozwiązaniem jest wyodrębnienie listy argumentów colorkey przygotowanej przez jedno połączenie do spplot()
i przekazanie tego do drugiego wywołania spplot()
za pośrednictwem jego argumentu legend=
. colorkey=
„wie” jak przygotować obiekt colorkey i legend=
umie rysować dowolne obiekty wewnątrz działek, więc możemy połączyć dwa, aby dostać to, co chcemy:
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))

Uwaga:colorkey=
"Brak wsparcia dla opcji" wewnątrz "wydaje się być mniejszy niż wybór projektu, a nie tylko kwestia autorów pakietu, którzy jeszcze nie doszli do wdrożenia wymaganego kodu. Jako dowód, że można znaleźć w dokumentacji colorkey=
w ?lattice::levelplot
(do którego jest kierowany przez `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
Nice! Dodałem go do przykładów spplot, jeśli nie masz nic przeciwko. –
Wcale nie, cieszę się, że to lubisz! To trochę hack, ponieważ określa położenie klucza w jego środku w stosunku do rozmiaru obszaru fabuły, powodując jego dryfowanie z miejsca, jeśli liczba zostanie przeskalowana. Lepszym rozwiązaniem byłoby zdefiniowanie pozycji w lewym górnym rogu z absolutną odległością od granicy obszaru kreślenia, ale nie wiem, jak to zrobić niestety. – Backlin
Dzięki Backlin !! Chciałem zapytać cię dokładnie o to - położenie względem narożnika. Czy nie ma takiej możliwości jak argument "rogu" z 'key.space'? – TMS