2012-03-08 18 views
6

Así que lograron llegar hasta aquí ...Porcentaje Escalas reflectante de facetas individuales con ggplot2

ggplot(init, aes(x=factor(ANGLE), fill=NETWORK)) + 
geom_bar(aes(y = (..count..)/sum(..count..))) + 
facet_wrap(~SHOW) + opts(legend.position = "top") + 
scale_y_continuous(labels = percent_format()) 

Mi problema es que las barras de colores a continuación representan el porcentaje de todas las mediciones ángulo de la cámara para toda la televisión programas en mi estudio. Por ejemplo, el gráfico OREILLY tiene una barra que se acerca al 15% para ANGLE 2, que es% 15 para todas las mediciones de ANGLE en el gráfico, no solo para aquellas en la faceta OREILLY. Lo que quiero que cada gráfico muestre es el porcentaje de recuentos relativo a solo UN programa de televisión (solo esa faceta), en lugar de todos. La idea es comparar el uso proporcional de ángulos de cámara entre diferentes espectáculos, pero con la forma actual del gráfico, está sesgado para hacer que los espectáculos con más cambios de ángulo de cámara parezcan pasar mucho más tiempo en la cámara. ángulo 2 de lo que realmente hacen en relación con los demás.

Lo frustrante de todo es que pasé una hora haciendo que pareciera como quería, luego cometí el error de actualizar R. Los paquetes se actualizaron junto con él, y esto sucedió.

Una tabla de datos de tamaño reducido es available here.

EDIT: Esto tampoco funciona. Intenté poner "group = NETWORK" en cualquiera (y ambos) de los términos aes (...), pero nada cambió. También probé lo mismo con "group = SHOW", que pensé que podría tener más posibilidades ya que quería obtener solo un porcentaje de un SHOW en cada faceta (por lo tanto, las escalas para cada faceta deberían subir hasta aproximadamente 80 % ya que muchos de los shows son predominantemente el ángulo de la cámara 2). ¿Me estoy perdiendo de algo?

ggplot(init, aes(x=factor(ANGLE), fill=NETWORK), group=SHOW) 
+ geom_bar(aes(y = (..count..)/sum(..count..), group=NETWORK)) + 
+ facet_wrap(~SHOW) + opts(legend.position = "top") + 
+ scale_y_continuous(labels = percent_format()) 

Problematic Graphic

+0

Debe agregar 'aes (..., group = network)' para indicarle a ggplot que agrupe los resultados. – Andrie

+0

Esto no pareció funcionar. :-( – user1017124

Respuesta

4

El uso de la estadística ..density.. en lugar de ..count.. parece que funciona para mí:

ggplot(dat, aes(x=factor(ANGLE))) + 
geom_bar(aes(y = ..density..,group = SHOW,fill = NETWORK)) + 
facet_wrap(~SHOW) + 
opts(legend.position = "top") + 
scale_y_continuous(labels = percent_format()) 

Al menos, esto produce un resultado diferente, no puedo decir con seguridad que refleja Lo que quieras. Además, no estoy seguro de por qué la estadística ..count.. se comportaba de esa manera.

enter image description here

+0

¡USTED, señor, es un hacedor de milagros! ¡Gracias! – user1017124

+1

Creo que debe agregar '' 'width = 1''' a la llamada' '' geom_bar''' porque '' '..density. .''' dibuja los compases para que su área sume a uno. Esto es solo lo mismo que el porcentaje que cae en un contenedor cuando los contenedores son de ancho 1 y después de algunas investigaciones, he encontrado que el ancho predeterminado es 0.9 cuando la x eje es un factor (línea 79 stat-bin.r). Desafortunadamente, esto también altera la apariencia de las barras. Para verificar el problema, considere el panel HARDBALL que parece mostrar que la barra más alta tiene una proporción mayor que 100% – orizon

+0

@ orizon Buena captura. Iba a actualizar mi respuesta, pero el enlace a los datos del OP parece estar muerto. Las otras dos opciones son '..ndensity..' o simplemente resume tus datos fuera de ggplot y usa' stat = "identity" '. – joran

0

esto ya no está trabajando en nuevas versiones de ggplot. La forma de hacerlo ahora es + stat_count(aes(y=..prop..))

+0

¿Puede ampliar esto, por favor? ¿Es solo una línea adicional que debe agregarse al código proporcionado en el pregunta? – JPD

Cuestiones relacionadas