2012-04-10 19 views
8

Esta pregunta es consecuencia de mis sobre los colores de fondo en ggplot2.¿Cómo puedo tener dos diferentes scale_fill_manual activo en un comando ggplot

De las respuestas allí, ahora soy capaz de usar geom_rect para dar un fondo a mi trama que tiene cinco colores diferentes. Además de eso, me gustaría trazar un gráfico de barras que use dos colores diferentes. Puedo hacer cada una de estas tareas por separado, pero cuando trato de combinar los comandos scale_fill_manual choque.

Aquí es lo que estoy tratando:

scores = data.frame(category = 1:4, percentage = c(34,62,41,44), type = c("a","a","a","b")) 
rects <- data.frame(ystart = c(0,25,45,65,85), yend = c(25,45,65,85,100), col = letters[1:5]) 
labels = c("ER", "OP", "PAE", "Overall") 
medals = c("navy","goldenrod4","darkgrey","gold","cadetblue1") 

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, ymax = yend, fill=col), alpha = 0.3) + 
scale_fill_manual(values=medals) + 
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") + 
#scale_fill_manual(values = c("indianred1", "indianred4")) + 
scale_x_continuous(breaks = 1:4, labels = labels) 

Como está escrito, esto hace que los dos colores barchart lo mismo que los dos primeros colores de fondo. Extracción de la "#" en la segunda scale_fill_manual comando (penúltima línea) anula el color de fondo comandos para hacer las barras de los colores que quiero, pero hace que el fondo tiene sólo los dos colores que quiero en el barchart.

¿Cómo puedo tener un solo comando scale_fill_manual aplicar al fondo geom_rect y el otro a la geom_bar diagrama de barras (o cómo puedo conseguir el mismo efecto por otros medios)?

Respuesta

8

El problema es que está utilizando "a" y "b" tanto en rects y scores, por lo que obtener correlaciona con el mismo color. Desde los rectángulos parecen ser los valores de marcador de posición, cambiar a algo distinto que las clases más tardar nada en scores.

rects$col <- c("Z1","Z2","Z3","Z4","Z5") 

Ahora usted puede hacer uno scale_fill_manual con todos (7) colores.

ggplot() + 
geom_rect(data = rects, aes(xmin = -Inf, xmax = Inf, ymin = ystart, 
          ymax = yend, fill=col), alpha = 0.3) + 
opts(legend.position="none") + 
geom_bar(data=scores, aes(x=category, y=percentage, fill=type), stat="identity") + 
scale_fill_manual(values=c("indianred1", "indianred4", medals)) + 
scale_x_continuous(breaks = 1:4, labels = labels) 

enter image description here

+0

Brilliant! Gracias. (tuve que cambiar medallas al inicio de la lista de valores en scale_fill_manual para que todo salga como tu imagen, pero haciendo que funcionó.) –

Cuestiones relacionadas