2012-04-10 3 views
8

Diese Frage folgt auf meine über Hintergrundfarben in ggplot2.Wie kann ich zwei verschiedene scale_fill_manual aktiv in einem ggplot Befehl haben

Von den Antworten dort, ich bin jetzt in der Lage, geom_rect zu verwenden, um meinem Diagramm einen Hintergrund zu geben, der fünf verschiedene Farben hat. Darüber hinaus möchte ich ein Balkendiagramm erstellen, das zwei verschiedene Farben verwendet. Ich kann jede dieser Aufgaben einzeln ausführen, aber wenn ich versuche, sie zu kombinieren, kollidieren die scale_fill_manual Befehle.

Hier ist, was ich versuche:

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) 

Wie geschrieben, das macht die beiden barchart Farben die gleichen wie die ersten beiden Hintergrundfarben. Entfernen der "" auf dem zweiten scale_fill_manual Befehl (vorletzte Zeile) überschreibt die Hintergrundfarbe Befehle, um die Bars die Farben, die ich will, aber den Hintergrund nur die zwei Farben, die ich will in der barchart.

Wie kann ich einen scale_fill_manual Befehl an den geom_rect Hintergrund aufbringt und die andere mit dem geom_bar barchart (oder wie kann ich den gleichen Effekt mit anderen Mitteln erreichen)?

Antwort

8

Das Problem ist, dass Sie sowohl "a" und "b" in rects und scores verwenden, so erhalten sie die gleiche Farbe abgebildet. Da die Rechtecke Platzhalterwerte zu sein scheinen, ändern Sie sie in etwas anderes, das später sortiert als alles in scores.

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

Jetzt können Sie ein scale_fill_manual mit allen (7) Farben machen.

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! Vielen Dank. (Ich musste Medaillen an den Anfang der Werteliste in scale_fill_manual umschalten, damit alles wie dein Bild herauskommt, aber das hat funktioniert.) –

Verwandte Themen