tamaño - Ubicación de la leyenda R en una trama
tamaño de la leyenda en r (4)
Tengo un diagrama que tiene datos que se ejecutan en el área que me gustaría usar para una leyenda. ¿Hay alguna manera de hacer que la trama se coloque automáticamente en algo así como un espacio de encabezado por encima de los puntos de datos más altos para adaptarse a la leyenda?
Puedo hacer que funcione si ingreso manualmente los argumentos ylim()
para expandir el tamaño y luego doy las coordenadas exactas de donde quiero ubicar la leyenda, pero preferiría tener un medio más flexible de hacerlo, ya que es un front end para una consulta de base de datos y los niveles de datos pueden tener niveles muy diferentes.
Basándose en la solución @P-Lapointe, pero haciéndola extremadamente fácil, puede usar los valores máximos de sus datos usando max()
y luego reutilizar esos valores máximos para establecer las coordenadas legend
xy. Para asegurarte de que no pasas de los límites, configura ylim
ligeramente por encima de los valores máximos.
a=c(rnorm(1000))
b=c(rnorm(1000))
par(mfrow=c(1,2))
plot(a,ylim=c(0,max(a)+1))
legend(x=max(a)+0.5,legend="a",pch=1)
plot(a,b,ylim=c(0,max(b)+1),pch=2)
legend(x=max(b)-1.5,y=max(b)+1,legend="b",pch=2)
Editar 2017:
use ggplot y theme (legend.position = ""):
library(ggplot2)
library(reshape2)
set.seed(121)
a=sample(1:100,5)
b=sample(1:100,5)
c=sample(1:100,5)
df = data.frame(number = 1:5,a,b,c)
df_long <- melt(df,id.vars = "number")
ggplot(data=df_long,aes(x = number,y=value, colour=variable)) +geom_line() +
theme(legend.position="bottom")
Respuesta original 2012: Ponga la leyenda en la parte inferior:
set.seed(121)
a=sample(1:100,5)
b=sample(1:100,5)
c=sample(1:100,5)
dev.off()
layout(rbind(1,2), heights=c(7,1)) # put legend on bottom 1/8th of the chart
plot(a,type=''l'',ylim=c(min(c(a,b,c)),max(c(a,b,c))))
lines(b,lty=2)
lines(c,lty=3,col=''blue'')
# setup for no margins on the legend
par(mar=c(0, 0, 0, 0))
# c(bottom, left, top, right)
plot.new()
legend(''center'',''groups'',c("A","B","C"), lty = c(1,2,3),
col=c(''black'',''black'',''blue''),ncol=3,bty ="n")
Tienes que agregar el tamaño del cuadro de leyenda al rango de ylim
#Plot an empty graph and legend to get the size of the legend
x <-1:10
y <-11:20
plot(x,y,type="n", xaxt="n", yaxt="n")
my.legend.size <-legend("topright",c("Series1","Series2","Series3"),plot = FALSE)
#custom ylim. Add the height of legend to upper bound of the range
my.range <- range(y)
my.range[2] <- 1.04*(my.range[2]+my.legend.size$rect$h)
#draw the plot with custom ylim
plot(x,y,ylim=my.range, type="l")
my.legend.size <-legend("topright",c("Series1","Series2","Series3"))
?legend
te dirá:
Argumentos
x
, y
las coordenadas y
que se utilizarán para posicionar la leyenda. Se pueden especificar por palabra clave o de cualquier manera que sea aceptada por xy.coords
: ver ''Detalles''.
Detalles:
Los argumentos x
, y
, leyenda se interpretan de forma no estándar para permitir que las coordenadas se especifiquen a través de uno o dos argumentos. Si falta la leyenda e y
no es numérica, se supone que el segundo argumento es leyenda y que el primer argumento especifica las coordenadas.
Las coordenadas se pueden especificar de cualquier manera que sea aceptada por xy.coords
. Si esto da las coordenadas de un punto, se usa como la coordenada superior izquierda del rectángulo que contiene la leyenda. Si da las coordenadas de dos puntos, estos especifican las esquinas opuestas del rectángulo (cualquier par de esquinas, en cualquier orden).
La ubicación también puede especificarse estableciendo x
en una sola palabra clave de la lista bottom
left
, bottom
, bottom
left
, left
, topleft
, top
, topright
, right
y center
. Esto coloca la leyenda en el interior del marco de la trama en la ubicación determinada. Se usa la coincidencia parcial de argumentos. El argumento de inserción opcional especifica qué tan lejos está la leyenda de los márgenes de la gráfica. Si se da un valor único, se usa para ambos márgenes; si se dan dos valores, el primero se usa para x-distance, el segundo para y-distance.