2010-08-10 16 views
20

Soy un novato R y tenía una pregunta. Estoy tratando de colocar un texto en un diagrama R. Aquí hay un código que usa el conjunto de datos de brillo en el paquete UsingR.Alinear texto dentro de un diagrama

library(UsingR) 
    brightness 

    MyMean <- mean(brightness) 
    MyMedian <- median(brightness) 
    MySd <- sd(brightness) 

    hist(brightness, breaks=35, main="This is a Histogram", 
     xlab="Brightness", ylab="Frequency", xlim=c(0,15), ylim=c(0, 200)) 

    text(3.5, 150, paste("Mean =", round(MyMean, 1), "\n Median =", 
     round(MyMedian, 1), "\n Std.Dev =", round(MySd, 1))) 

Este código produce:

enter image description here

El problema con esta salida es que el texto no se deja alligned izquierda. ¿Alguien sabe cómo hacer que el texto quede alineado?

Gracias.

Respuesta

29

Si bien legend() es apropiado para las leyendas, existe una solución general para todo el texto. El truco es que la opción pos no solo establece la posición del texto en relación con la ubicación actual, sino que también establece la justificación. Arriba y Abajo están justificados en el centro. Establecer pos en 2 hace que el texto esté justificado a la derecha. Cuando se establece a la derecha de la posición (pos = 4), se justifica a la izquierda.

reemplazar su código de texto con ...

text(1.5, 150, paste("Mean =", round(MyMean, 1), "\nMedian =", 
     round(MyMedian, 1), "\nStd.Dev =", round(MySd, 1)), pos = 4) 

para justificado a la izquierda y ...

text(5.0, 150, paste("Mean = ", round(MyMean, 1), "\nMedian = ", 
     round(MyMedian, 1), "\nStd.Dev = ", round(MySd, 1), sep = ''), pos = 2) 

para justificado a la derecha.

+3

La sentencia 'paste' está bien, pero también puede obtener el mismo resultado con:' sprintf ("Mean =% 3.1f \ nMedian =% 3.1f \ nStd.Dev =% 3.1f", MyMean, MyMedian, MySd) ' – nullglob

12

Intente utilizar legend() en lugar de text()

legend(3.5, 150, legend = c(paste("Mean =", round(MyMean, 1)), 
          paste("Median =",round(MyMedian, 1)), 
          paste("Std.Dev =", round(MySd, 1))), 
        bty = "n") 

Vas a tener que jugar con el ajuste de posición. Puede considerar no usar las coordenadas xy en absoluto, pero reemplazar esos dos argumentos con "topleft"

Cuestiones relacionadas