我有几个用于创建绘图的数据框。在这些图中,我希望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)
并不一定以我想要的顺序给出因素,所以我正在寻找更强大的解决方案。最重要的是,这似乎应该很容易,我觉得我可能忽略了一个非常简单的方法来解决这个问题,这就是我现在在这里问的原因。有没有人有个好主意?任何提示都将不胜感激!