如何在ggplot命令中激活两个不同的scale_fill_manual

时间:2012-04-10 22:55:55

标签: r graph ggplot2

关于ggplot2中的earlier one关于背景颜色的问题,接下来是这个问题。

从那里的答案,我现在能够使用geom_rect为我的情节提供五种不同颜色的背景。最重要的是,我想绘制一个使用两种不同颜色的条形图。我可以单独完成这些任务,但是当我尝试将它们组合起来时,scale_fill_manual命令就会发生冲突。

以下是我正在尝试的内容:

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”会覆盖背景颜色命令,使条形成为我想要的颜色,但使背景只有我想要的两种颜色{{{ 1}}。

如何将一个barchart命令应用于scale_fill_manual背景,将另一个命令应用于geom_rect条形图(或者如何通过其他方式实现相同的效果)?

1 个答案:

答案 0 :(得分:9)

问题是您在"a""b"中都使用rectsscores,因此它们会映射到相同的颜色。由于矩形似乎是占位符值,因此将它们更改为与scores中的任何内容相比排序更晚的内容。

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

现在,您可以使用所有(7)颜色制作一个scale_fill_manual

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