如何根据数据帧中的因子级别为ggplot中的barplot指定scale_fill_manual?

时间:2015-03-14 04:16:49

标签: r ggplot2

我有几个用于创建绘图的数据框。在这些图中,我希望fill - 颜色基于某个变量的因子水平,但在某些数据帧中,某些因素不存在(例如,在3个不同的潜在因子水平中,仅实际上是2),这使得相似因子水平的图表中的颜色不同。我希望他们是一样的。到目前为止,我已将所需的颜色指定为数据框中的一列,我已尝试将其传递给ggplot,但我的解决方案效果不佳。让我告诉你我的意思:

 library(plyr); library(dplyr); library(ggplot2)
 dat <- mtcars
 dat$col <- mapvalues(dat$cyl, from=c(4,6,8), to=c("yellow", "red", "grey"))

 q <- ggplot(dat, aes(x=gear, y=carb)) + 
             geom_bar(stat="identity", position="dodge", aes(fill=factor(cyl))) + 
             scale_fill_manual(values=unique(dat$col))

 dat2 <- filter(dat, cyl>4)
 p <- ggplot(dat2, aes(x=gear, y=carb)) + 
      geom_bar(stat="identity", position="dodge", aes(fill=factor(cyl))) + 
      scale_fill_manual(values=unique(dat2$col))

比较两个图表显示使用的颜色不同。问题在于unique(dat$col)并不一定以我想要的顺序给出因素,所以我正在寻找更强大的解决方案。最重要的是,这似乎应该很容易,我觉得我可能忽略了一个非常简单的方法来解决这个问题,这就是我现在在这里问的原因。有没有人有个好主意?任何提示都将不胜感激!

0 个答案:

没有答案