2012-03-02 32 views
8

Quiero dividir la leyenda en una parcela en 2, de modo que los 3 primeros elementos estén separados del 4º elemento por un espacio de aproximadamente 1 línea de alto. Inicialmente sólo traté de añadir un salto de línea antes de la primera elemento:Leyendas en parcelas R

legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n") 

pero esto parece aumentar la brecha entre medio todos los elementos (es este comportamiento documentado?)

Luego utiliza 2 leyendas separadas, estableciendo los bordes en "n" y usando lines() para reconstruir los bordes (dicho sea de paso, ¿hay alguna forma de suprimir solo 1 borde de una leyenda?); aunque esto funciona, requiere una gran cantidad de prueba y error con los valores de inset.

Los valores por defecto de inset en legend() son c(0,0), pero es evidente que éstas quedan ajustados en la llamada inicial a legend(), basado en la longitud del texto en los elementos de esa leyenda. De acuerdo con ?legend, el valor de una llamada legend() incluye

"vectores numéricos de longitud de longitud (leyenda), dando las coordenadas xey del texto (s) de la leyenda."

¿Hay alguna forma de que esto se pueda convertir en valores adecuados para el inset de la 2da llamada para que los elementos de ambas leyendas se alineen?

Respuesta

22

simplemente especifique NA en los argumentos donde desea que esté el espacio. Tendrá que dar todos los argumentos de la leyenda como vectores.

set.seed(2) 
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
     pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12)) 
    legend("topright", pch = c(3, 19, NA, 3, 19), 
     col = c("green", "green", NA, "blue", "blue"), 
     legend = c("green cross", "green dot", NA, "blue cross", "blue dot")) 

enter image description here

Alternativamente, si desea hacer 2 llamadas a legend() para un control más preciso, especifique trace=TRUE en los argumentos y le devuelve la coordenadas xey que necesita.

+0

¡Gracias, mucho más fácil de lo que lo estaba haciendo! – ChrisW

Cuestiones relacionadas