Outra solução, além dos ondes já mencionados (usando layout
oupar(xpd=TRUE)
), é sobrepor sua plotagem com uma plotagem transparente sobre todo o dispositivo e adicionar a legenda a isso.
O truque é sobrepor um gráfico (vazio) sobre a área de plotagem completa e adicionar a legenda a isso. Nós podemos usar a par(fig=...)
opção Primeiro, instruímos R para criar um novo gráfico em todo o dispositivo de plotagem:
par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)
É necessário definir oma
e mar
é necessário, pois queremos que o interior da trama cubra todo o dispositivo. new=TRUE
é necessário para impedir que o R inicie um novo dispositivo. Podemos então adicionar o gráfico vazio:
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
E estamos prontos para adicionar a legenda:
legend("bottomright", ...)
adicionará uma legenda no canto inferior direito do dispositivo. Da mesma forma, podemos adicionar a legenda à margem superior ou direita. A única coisa que precisamos garantir é que a margem da trama original seja grande o suficiente para acomodar a legenda.
Colocando tudo isso em uma função;
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 um exemplo Primeiro, crie o gráfico, certificando-se de que temos espaço suficiente na parte inferior para adicionar a legenda:
par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)
Em seguida, adicione a legenda
add_legend("topright", legend=c("Foo", "Bar"), pch=20,
col=c("steelblue", "indianred"),
horiz=TRUE, bty='n', cex=0.8)
Resultando em: