2010-03-31 39 views
13

Estoy tratando de mostrar las frecuencias dentro de la barra ... bueno, las quiero en algún lugar en el gráfico: debajo de las barras, dentro de barras, sobre barras o en el área de leyenda. Y recuerdo (puedo estar equivocado) que se puede hacer en ggplot2. Este es probablemente uno fácil ... al menos parece fácil. Aquí está el código:Mostrar frecuencias junto con barra en ggplot2

p <- ggplot(mtcars) 
p + aes(factor(cyl)) + geom_bar() 

¿Hay alguna posibilidad de que pueda obtener las frecuencias incrustadas en el gráfico?

Respuesta

18

geom_text es tha analógica de text de gráficos de base:

p + geom_bar() + stat_bin(aes(label=..count..), vjust=0, 
          geom="text", position="identity") 

Si desea ajustar la posición Y de las etiquetas, puede utilizar la estética y= dentro stat_bin: por ejemplo, y=..count..+1 pondrá la etiqueta una unidad arriba de la barra.

Lo anterior también funciona si usa geom_text y stat="bin" adentro.

+0

Para la etiqueta, ¿por qué hay un "..." anterior y posterior al recuento? –

+1

'..count..' es el nombre de la variable que contiene las frecuencias de bin que' stat_bin' crea automáticamente. Entonces, los dos períodos anteriores y posteriores forman parte del nombre de variable – Aniko

+0

. Esta respuesta me dio un error 'Error: stat_count requiere la siguiente estética faltante: x'. Sin embargo, agregando el 'aes (factor (cyl))' y cambiando 'stat_bin' a' stat_count' como en 'p + aes (factor (cyl)) + geom_bar() + stat_count (aes (label = .. count. .), vjust = 0, geom = "text", position = "identity") 'funcionó. – steveb

0

Si no está restringido a ggplot2, puede usar? Text de base graphics o? Boxed.labels del paquete plotrix.

4

Una manera difícil de hacerlo. Estoy seguro de que hay mejores enfoques.

ggplot(mtcars,aes(factor(cyl))) + 
geom_bar() + 
geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]), 
label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x]))) 
+11

Por lo general es una buena práctica para crear su _fuera_ los datos de su código de trazado. Y nunca es una buena idea insertar datos en las asignaciones estéticas. – hadley

0

Cuando se quiere añadir información diferente las siguientes obras:

ggplot(mydata, aes(x=clusterSize, y=occurence)) + 
geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo)) 
+0

¿Puede usted, por favor, replicar esta respuesta proporcionando un ejemplo que se refiera a los datos disponibles en el paquete 'datasets' (u otro paquete disponible en repositorios CRAN)? Dudo que la barra de representación se pueda dibujar con la variable 'y' especificada" como es "... – aL3xa

Cuestiones relacionadas