2012-04-10 49 views
8

從GGPLOT2我約背景顏色這一個問題,在兩個不同的scale_fill_manual活躍。我怎麼能在ggplot命令

從那裏的答案,我現在能夠使用geom_rect給一個背景,我的劇情有五種不同的顏色。最重要的是,我想繪製一個使用兩種不同顏色的條形圖。我可以分別執行這些任務中的每一個,但是當我嘗試將它們組合起來時,命令會發生衝突。

這裏就是我想:

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) 

書面,這使得兩個條形圖的顏色相同,前兩個背景顏色。在第二個scale_fill_manual命令(倒數第二行)上刪除「#」將覆蓋背景顏色命令,使條形成我想要的顏色,但使背景具有我想要的barchart中的兩種顏色。

怎樣纔可以有一個scale_fill_manual命令適用於geom_rect背景和其他的geom_bar條形圖(或者我如何能實現通過其他方式同樣的效果)?

回答

8

的問題是,您在這兩個rectsscores使用"a""b",所以他們被映射到相同的顏色。由於這些矩形看起來像是佔位符值,所以請將其更改爲不同於scores中的任何內容。現在

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

也可以使一個scale_fill_manual所有(7)的顏色。

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

輝煌!謝謝。 (我必須將獎牌切換到scale_fill_manual的值列表的開頭,讓所有內容像您的照片一樣出來,但這樣做很有效。) – 2012-04-10 23:45:43