Un'altra soluzione, oltre ai già citati ondes (usando layout
o par(xpd=TRUE)
) è quello di sovrapporre la trama con una trama trasparente sopra l'intero dispositivo e quindi aggiungere la leggenda a questo.
Il trucco consiste nel sovrapporre un grafico (vuoto) sopra l'area di disegno completa e aggiungere la legenda a questo. Possiamo usare l'opzione par(fig=...)
. In primo luogo insegniamo R per creare una nuova trama sull'intero dispositivo di stampa:
par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)
impostazione è necessario oma
e mar
poiché vogliamo avere l'interno della trama copre l'intero dispositivo. new=TRUE
è necessario per impedire a R di avviare un nuovo dispositivo. poi possiamo aggiungere la trama vuoto:
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
E noi siamo pronti ad aggiungere la leggenda:
legend("bottomright", ...)
aggiungerà una leggenda in basso a destra del dispositivo. Allo stesso modo, possiamo aggiungere la legenda al margine superiore o destro. L'unica cosa che dobbiamo assicurare è che il margine della trama originale sia abbastanza grande da contenere la leggenda.
Mettere tutto questo in una funzione;
add_legend <- function(...) {
opar <- par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0),
mar=c(0, 0, 0, 0), new=TRUE)
on.exit(par(opar))
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
legend(...)
}
E un esempio.Innanzitutto creare la trama assicurandosi che abbiamo abbastanza spazio in basso per aggiungere la leggenda:
par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)
quindi aggiungere la leggenda
add_legend("topright", legend=c("Foo", "Bar"), pch=20,
col=c("steelblue", "indianred"),
horiz=TRUE, bty='n', cex=0.8)
Con conseguente:

... si può anche incidere pari con il contenitore manichino per la leggenda, il time-to-tempo facile e molto conveniente. Domanda simile [qui] (http://stackoverflow.com/questions/8736647/adding-legend-annotate-to-rs-plot-similar-to-rs-ggplot). – hhh
@hhh Il link non funziona più. Puoi aggiornarlo o pubblicare una risposta utilizzando questo approccio? – Henrik