2012-02-16 25 views
17

Me gustaría etiquetar cada barra de un histograma con el número de conteos en ese contenedor o el porcentaje de recuentos totales que están en ese contenedor. Estoy seguro de que debe haber una manera de hacer esto, pero no he podido encontrarlo. Esta página tiene un par de imágenes de histogramas SAS que básicamente hacen lo que intento hacer (pero el sitio no parece tener versiones R): http://www.ats.ucla.edu/stat/sas/faq/histogram_anno.htmCómo etiquetar barras de histograma con valores de datos o porcentajes en R

Si es posible, también sería bueno tener el flexibilidad para colocar las etiquetas arriba o en algún lugar dentro de las barras, según lo deseado.

Estoy tratando de hacer esto con las instalaciones de trazado de base R, pero también me interesarían los métodos para hacer esto en ggplot2 y enrejado.

+0

¿Desea algo como esto (http://stackoverflow.com/a/9185168/707145)? – MYaseen208

+0

Ver este también http://stackoverflow.com/q/6644997/707145 – MYaseen208

+0

Sí. Ese ejemplo es un diagrama de barras, pero estoy buscando hacer algo similar con un histograma, aunque me gustaría tener un control preciso sobre dónde va el texto, en lugar de tener que colocarlo directamente sobre cada barra. – eipi10

Respuesta

29

Para incluir el número de conteos, puede simplemente configurar labels=TRUE.

El ejemplo de abajo es sólo ligeramente adaptada de uno en la página de ayuda hist():

porcentajes
hist(islands, col="gray", labels = TRUE, ylim=c(0, 45)) 

enter image description here

recibiendo es un poco más complicado. La única manera que conozco para hacer que manipular directamente el objeto devuelto por una llamada a hist(), como se describe en detalle un poco más en mi respuesta a this similar question:

histPercent <- function(x, ...) { 
    H <- hist(x, plot = FALSE) 
    H$density <- with(H, 100 * density* diff(breaks)[1]) 
    labs <- paste(round(H$density), "%", sep="") 
    plot(H, freq = FALSE, labels = labs, ylim=c(0, 1.08*max(H$density)),...) 
} 

histPercent(islands, col="gray") 

enter image description here

+0

Gracias Josh. Dos seguimientos: (1) ¿Qué sucede si quiero seguir contando los conteos, pero etiquetar las barras con porcentajes? (2) ¿Hay alguna manera de obtener un control preciso sobre la ubicación vertical de los números (por ejemplo, colocarlos dentro de las barras (arriba, abajo o abajo), justo debajo de las barras, etc.? También, hay una manera de controlar la rotación del texto (por ejemplo, gire 90 grados para que los números grandes sigan cabiendo). – eipi10

+0

@ eipi10: vea mis comentarios para las versiones de ggplot2 y para obtener más control sobre el lugar de los recuentos y porcentajes. – MYaseen208

+0

@ eipi10 - La segunda parte de mi respuesta debería ser suficiente para que comiences con un control más preciso, si realmente quieres hacerlo. La clave es que las llamadas a 'hist()' devuelven un objeto que tiene todas las piezas que necesitas para obtener las coordenadas de las etiquetas que luego puedes colocar usando 'text()' o lo que sea. –

3

la adición de números en el la parte superior de las barras en barras o histogramas distorsiona la interpretación visual de las barras, incluso al colocar las etiquetas dentro de las barras cerca de la parte superior crea un efecto superior borroso que dificulta al espectador interpretar correctamente el gráfico. Si el número es de interés, entonces esto crea una tabla mal diseñada, ¿por qué no crear una tabla adecuada?

Si realmente siente la necesidad de agregar los números, es mejor colocarlos debajo de las barras o en el margen superior para alinearlos mejor para una comparación más fácil y no interferir con la interpretación visual del gráfico . Las etiquetas pueden agregarse a los gráficos base utilizando las funciones text o mtext y las ubicaciones x se pueden encontrar en el valor de retorno de la función hist. Las alturas para trazado se pueden calcular utilizando la función grconvertY.

+0

Gracias Greg. Estoy de acuerdo con tus comentarios sobre la colocación de texto. Vea mi comentario a la respuesta de Josh con respecto al control preciso de la colocación del texto. – eipi10

+0

También encuentro que trazar una cuadrícula en lugar de los números de valor es suficiente para dar una representación justa de los valores reales – Vasile

Cuestiones relacionadas