Une autre solution, en plus des ondes déjà mentionnées (en utilisant layout
ou par(xpd=TRUE)
), consiste à superposer votre tracé avec un tracé transparent sur l'ensemble de l'appareil, puis à y ajouter la légende.
L'astuce consiste à superposer un graphique (vide) sur toute la zone de traçage et à y ajouter la légende. Nous pouvons utiliser l' par(fig=...)
option. Nous demandons d'abord à R de créer un nouveau tracé sur tout le périphérique de traçage:
par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)
Réglage oma
et mar
est nécessaire car nous voulons que l'intérieur de la parcelle recouvre l'ensemble de l'appareil. new=TRUE
est nécessaire pour empêcher R de démarrer un nouvel appareil. Nous pouvons ensuite ajouter le tracé vide:
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
Et nous sommes prêts à ajouter la légende:
legend("bottomright", ...)
ajoutera une légende en bas à droite de l'appareil. De même, nous pouvons ajouter la légende dans la marge supérieure ou droite. La seule chose que nous devons nous assurer est que la marge de l'intrigue originale est suffisamment grande pour accueillir la légende.
Mettre tout cela en fonction;
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(...)
}
Et un exemple. Commencez par créer l'intrigue en vous assurant que nous avons suffisamment d'espace en bas pour ajouter la légende:
par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)
Puis ajoutez la légende
add_legend("topright", legend=c("Foo", "Bar"), pch=20,
col=c("steelblue", "indianred"),
horiz=TRUE, bty='n', cex=0.8)
Résultant en: