2012-04-10 12 views
8

Questa domanda fa seguito al mio sui colori di sfondo in ggplot2.Come posso avere due differenti scale_fill_manual attive in un comando ggplot

Dalle risposte, ora sono in grado di utilizzare geom_rect per dare uno sfondo alla mia trama che ha cinque colori diversi. Oltre a questo mi piacerebbe tracciare un diagramma a barre che utilizza due colori diversi. Posso svolgere ognuna di queste attività separatamente, ma quando provo a combinarle, i comandi scale_fill_manual si scontrano.

Ecco quello che sto cercando:

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) 

Come scritto, questo rende i due colori DiagrammaBarre lo stesso come i primi due colori di sfondo. La rimozione di "#" sul secondo comando scale_fill_manual sostituisce i comandi del colore di sfondo per rendere le barre i colori desiderati ma rende lo sfondo con i due colori desiderati nello barchart.

Come posso avere uno scale_fill_manual comando applicando al geom_rect background e l'altra al geom_bar barchart (o come posso ottenere lo stesso effetto con altri mezzi)?

risposta

8

Il problema è che si sta utilizzando e "a""b" sia rects e scores, in modo da ottenere mappati allo stesso colore. Poiché i rettangoli sembrano essere valori segnaposto, cambiarli in qualcosa di distinto che ordina più tardi di qualsiasi cosa in scores.

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

Ora è possibile effettuare una scale_fill_manual con tutto (7) colori.

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! Grazie. (Ho dovuto passare le medaglie all'inizio della lista dei valori in scale_fill_manual per ottenere che tutto venisse fuori come la tua foto, ma farlo funzionava). –

Problemi correlati