2012-06-23 28 views
16

Una imagen dice más de mil palabras. Como puede ver, mi fill se basa en la variable variable. Sin embargoR ggplot barplot; Relleno basado en dos variables separadas

Dentro de cada bar hay ya que la variable discreta de datos múltiples entidades (bordes negros) complexity que sean únicos. Lo que estoy tratando de encontrar es algo que hace que cada sección de la barra sea más distinguible que el aspecto actual. Preferible sería si fuera algo así como sombreado.

http://s12.postimage.org/ltgs677ul/snapshot2.png

He aquí un ejemplo (no el mismo conjunto de datos, ya que se importó el original):

dat <- read.table(text = "Complexity Method Sens Spec MMC 
1 L Alpha 50 20 10 
2 M Alpha 40 30 80 
3 H Alpha 10 10 5 
4 L Beta 70 50 60 
5 M Beta 49 10 80 
6 H Beta 90 17 48 
7 L Gamma 19 5 93 
8 M Gamma 18 39 4 
9 H Gamma 10 84 74", sep = "", header=T) 

library(ggplot2) 
library(reshape) 
short.m <- melt(dat) 
ggplot(short.m, aes(x=Method, y= value/100 , fill=variable)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    coord_flip() 
+0

No hay nada que nos impida la adición de un [ejemplo reproducible] (http: //stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) aunque :) – Chase

+0

Agregado un ejemplo;) – user1476968

Respuesta

19

Esto está lejos de ser perfecto, pero es de esperar un paso en la dirección correcta, ya que es esquivado por variable, pero se las arregla para representar Complexity de alguna manera:

ggplot(short.m, aes(x=Method, y=value/100, group=variable, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity",position="dodge", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + 
    coord_flip() 

enter image description here

+0

¡Eso es absolutamente genial! Precisamente lo que necesitaba continuar. – user1476968

+0

El único problema con esta solución es que las barras se oscurecen entre sí. En Alfa Spec hay realmente una barra de H, pero es completamente oculto desde que se dibuja primero (H viene antes de L y M). Como los valores alfa también se suman uno no se puede decir cuál es cuál (ver Beta Spec). Obviamente, sabemos que la línea media es para H, pero es probable que el lector no lo haga. – user1476968

0

difícil estar seguro sin un ejemplo reproducible, como se dijo Chase, pero añadiendo alpha=complexity podría funcionar :

ggplot(short.m, aes(x=Method, y= value/100 , fill=variable, alpha=complexity)) + 
geom_bar(stat="identity",position="dodge", colour="black") + coord_flip() 
+0

Trataré de poner en un ejemplo reproducible este lunes. – user1476968

+0

El problema con el uso de alfa (muy parecido al uso del color) es que las barras se eluden entre sí. Lo que idealmente intento obtener es Stacked alpha (Complejidad) y Dodge Variable (que se derrite MMC, Sens y Spec) – user1476968

0

Puede que sea necesario separar sus Method y variable factores. Aquí hay dos maneras de hacerlo:

Uso facet_wrap():

ggplot(short.m, aes(x=variable, y=value/100, fill=Complexity)) + 
    facet_wrap(~ Method) + geom_bar(position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 

uso tanto en el eje X:

ggplot(short.m, aes(x=Method:variable, y=value/100, group=Method, fill=variable, alpha=Complexity,)) + 
    geom_bar(stat="identity", position="stack", colour="black") + 
    scale_alpha_manual(values=c(0.1, 0.5, 1)) + coord_flip() 
+0

Lo intentaré mañana por la mañana y veré cómo funciona. ;) – user1476968

+0

El problema con esta solución es que realmente no apila las barras, simplemente las agrega una encima de la otra. Como tal, dos Spec MC igualmente largos pueden tener diferentes longitudes ya que no están colocados en paralelo. – user1476968

+0

Ok, creo que ahora entiendo lo que estabas tratando de hacer. En ggplot, "apilar" significa agregarlos uno encima del otro. Que yo sepa, el tipo de pila que desea no es posible en ggplot. Creo que esta es la mejor opción: 'ggplot (short.m, AES (x = variable y = valor/100, fill = Complejidad)) + facet_wrap (~ Método) + geom_bar (posición = "esquivar", color =" black ") + coord_flip()' o tal vez 'ggplot (short.m, aes (x = Método: variable, y = valor/100, fill = Complejidad)) + geom_bar (position =" dodge ", color =" black ") + coord_flip() ' –