varias tamaño leyendas leyenda grafico graficas r plot legend

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.