R gráfica de porcentaje de barras astackdas con porcentaje de factor binario y tags (con ggplot)

Quiero producir un gráfico que se parece a esto:

enter image description here

Mi conjunto de datos original se ve así:

> bb[sample(nrow(bb), 20), ] IMG QUANT FIX 25663 1 1 0 7936 2 2 0 23586 3 2 0 23017 2 2 1 31363 1 3 1 7886 2 2 0 23819 3 3 1 29838 2 2 1 8169 2 3 1 9870 2 3 0 31440 2 1 0 35564 3 1 0 24066 1 2 0 12020 3 2 0 6742 3 2 0 6189 2 3 0 26692 2 3 0 1387 3 2 0 31839 2 3 1 28637 3 2 0 

Entonces, la idea es que las barras muestren dónde FIX = 1 por factor QUANT y por factor IMG .

plyr mi conjunto de datos en porcentajes usando plyr

 library(plyr) bb.perc <- ddply(bb,.(QUANT,IMG),summarise,FIX.PROP = sum(FIX) / length(FIX)) 

Hace casi lo correcto:

  QUANT IMG FIX.PROP 1 1 1 0.52439024 2 1 2 0.19085366 3 1 3 0.13658537 4 2 1 0.20414201 5 2 2 0.53964497 6 2 3 0.09585799 7 3 1 0.29000000 8 3 2 0.13000000 9 3 3 0.40705882 

Pero ahora, si hago un gráfico, no cuenta para FIX==0 casos, es decir, todas las barras tienen la misma altura, es decir, 100%, que no es lo que quiero. Observe cómo los subttwigs CUANTA individuales no sumn 100%:

 > sum(bb.perc[1:3,]$FIX.PROP) [1] 0.8518293 > sum(bb.perc[4:6,]$FIX.PROP) [1] 0.839645 > sum(bb.perc[7:9,]$FIX.PROP) [1] 0.8270588 

Lo mejor que puedo hacer con R es mostrar conteos:

 # Take only the positive samples bb.pos <- bb[bb$FIX == 1,] # Plot the counts ggplot(bb,aes(factor(QUANT),fill=factor(IMG))) + geom_bar() + scale_y_continuous(labels=percent) 

Y resultados en: enter image description here Esto tampoco es lo que quiero:

  • La escala de porcentaje está muy lejos. Necesito una forma de pasar el 100% de punto a la función de percent , pero no tengo idea de cómo.
  • Carece de las tags.

Ya hay muchas preguntas similares sobre SO, pero parece que carezco de la suficiente inteligencia (o comprensión de R) para extrapolar de ellas una solución a mi problema particular.

Gracias por cualquier punteros!

EDITAR: Sven Hohenstein ya dio una respuesta, pero así es como terminé haciéndolo yo también:

 > ggplot(bb.perc,aes(x=factor(QUANT),y=FIX.PROP,label=paste(round(FIX.PROP*100), "%"),fill=factor(IMG)))+ geom_bar(stat="identity") + geom_text(position="stack", aes(ymax=1),vjust=5) + scale_y_continuous(labels = percent) 

Usando el bb.perc que bb.perc más arriba utilizando plyr . Éste tiene la ventaja de que los porcentajes se calculan localmente por columna, y no globalmente.

Gracias a todos por la ayuda. Las siguientes dos preguntas y sus respectivas respuestas me ayudaron mucho a hacerlo bien:

Etiquetas de gráfico de barras astackdas con ggplot2

Agregar tags a ggplot gráfico de barras

Lo que hice mal inicialmente fue pasar el parámetro position = "fill" a geom_bar() , que por alguna razón hizo que todas las barras tuvieran la misma altura.

Esta es una forma de generar la ttwig:

 ggplot(bb[bb$FIX == 1, ],aes(x = factor(QUANT), fill = factor(IMG), y = (..count..)/sum(..count..))) + geom_bar() + stat_bin(geom = "text", aes(label = paste(round((..count..)/sum(..count..)*100), "%")), vjust = 5) + scale_y_continuous(labels = percent) 

Cambie el valor del parámetro vjust para ajustar la posición vertical de las tags.

enter image description here