2012-04-26 12 views
9

diagrama de barra esquivada en ggplot nuevamente me ha dejado perplejo. Pregunté sobre anotar el texto sobre las barras aquí unas semanas atrás (LINK) y obtuve una excelente respuesta al usar + stat_bin(geom="text", aes(label=..count.., vjust=-1)). Me di cuenta de que ya que tengo los conteos, les proporcionaré el .. antes y después y le dije al stat_bin que el position era dodge. Los alinea sobre el centro del grupo y se ajusta hacia arriba y hacia abajo. Probablemente algo menor. Por favor, ayúdame a poner el texto sobre las barras.Anotación sobre barras:

enter image description here

mtcars2 <- data.frame(type=factor(mtcars$cyl), 
    group=factor(mtcars$gear)) 
library(plyr); library(ggplot) 
dat <- rbind(ddply(mtcars2,.(type,group), summarise, 
    count = length(group)),c(8,4,NA)) 

p2 <- ggplot(dat,aes(x = type,y = count,fill = group)) + 
    geom_bar(colour = "black",position = "dodge",stat = "identity") + 
    stat_bin(geom="text", aes(position='dodge', label=count, vjust=-.6)) 
+1

echar un vistazo a esta [link] (http://stackoverflow.com/q/9184969/707145). – MYaseen208

+0

Esto funciona en MYaseen pero Marius es un poco más fácil de entender. +1 –

Respuesta

12

que estaba teniendo problemas para conseguir la posición esquiva a la línea, así que terminé creando un objeto position_dodge (es que la terminología correcta?), Guardarlo en una variable y, a continuación, utilizando eso como la posición para ambos geoms. Algo exasperante, todavía parecen estar un poco fuera de foco.

dodgewidth <- position_dodge(width=0.9) 
ggplot(dat,aes(x = type,y = count, fill = group)) + 
    geom_bar(colour = "black", position = dodgewidth ,stat = "identity") + 
    stat_bin(geom="text", position= dodgewidth, aes(x=type, label=count), vjust=-1) 

enter image description here

+1

El método de MYaseen está centrado. Me pregunto si hay una solución para stat bin. –

+2

Sí, lo he probado con 'dodgewidth <- position_dodge (width = 0.9) ', y está muy bien centrado. No tengo idea de por qué 0.9 sería el número mágico a través de – Marius

+0

No creo que haya nada especial en 0.9. En el ejemplo siguiente, cambie el valor de ancho en geom_bar y geom_text para ver el efecto. Me acabo de dar cuenta de que el ejemplo es casi el mismo que MYaseen208 –

8

Actualizadogeom_bar() necesidades stat = "identity"

creo que esto hace lo que quiere así.

mtcars2 <- data.frame(type = factor(mtcars$cyl), group = factor(mtcars$gear)) 
library(plyr); library(ggplot2) 
dat <- rbind(ddply(mtcars2, .(type, group), summarise, count = length(group)), c(8, 4, NA)) 

p2 <- ggplot(dat, aes(x = type,y = count,fill = group)) + 
    geom_bar(stat = "identity", colour = "black",position = "dodge", width = 0.8) + 
    ylim(0, 14) + 
    geom_text(aes(label = count, x = type, y = count), position = position_dodge(width = 0.8), vjust = -0.6) 
p2 

enter image description here