¿Trazar una leyenda fuera del área de trazado en los gráficos base?

Resuelto Henrik asked hace 54 años • 10 respuestas

Como dice el título: ¿Cómo puedo trazar una leyenda fuera del área de trazado cuando uso gráficos base?

Pensé en trastear layouty producir un gráfico vacío que solo contenga la leyenda, pero me interesaría encontrar una forma de usar solo las funciones del gráfico base y, por ejemplo, par(mar = )obtener algo de espacio a la derecha del gráfico para la leyenda.


Aquí un ejemplo:

plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

produce:

texto alternativo

Pero como dije, me gustaría que la leyenda estuviera fuera del área de trazado (por ejemplo, a la derecha del gráfico/trazado).

Henrik avatar Jan 01 '70 08:01 Henrik
Aceptado

Nadie ha mencionado el uso insetde valores negativos para legend. Aquí hay un ejemplo, donde la leyenda está a la derecha del gráfico, alineada hacia la parte superior (usando la palabra clave "topright").

# Random data to plot:
A <- data.frame(x=rnorm(100, 20, 2), y=rnorm(100, 20, 2))
B <- data.frame(x=rnorm(100, 21, 1), y=rnorm(100, 21, 1))

# Add extra space to right of plot area; change clipping to figure
par(mar=c(5.1, 4.1, 4.1, 8.1), xpd=TRUE)

# Plot both groups
plot(y ~ x, A, ylim=range(c(A$y, B$y)), xlim=range(c(A$x, B$x)), pch=1,
               main="Scatter plot of two groups")
points(y ~ x, B, pch=3)

# Add legend to top right, outside plot region
legend("topright", inset=c(-0.2,0), legend=c("A","B"), pch=c(1,3), title="Group")

Es posible que sea necesario ajustar el primer valor de inset=c(-0.2,0)según el ancho de la leyenda.

leyenda_derecha

Mike T avatar May 10 '2012 05:05 Mike T

Quizás lo que necesita es par(xpd=TRUE)permitir que se dibujen cosas fuera de la región de la trama. Entonces, si haces la trama principal, bty='L'tendrás algo de espacio a la derecha para una leyenda. Normalmente, esto se recortaría en la región de la trama, pero hágalo par(xpd=TRUE)y con un poco de ajuste podrá obtener una leyenda lo más a la derecha posible:

 set.seed(1) # just to get the same random numbers
 par(xpd=FALSE) # this is usually the default

 plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2), bty='L')
 # this legend gets clipped:
 legend(2.8,0,c("group A", "group B"), pch = c(1,2), lty = c(1,2))

 # so turn off clipping:
 par(xpd=TRUE)
 legend(2.8,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
Spacedman avatar Oct 14 '2010 11:10 Spacedman