我有一个R数据帧(df),我在ggplot2中作为条形图绘制,并且基于数据帧(df $ type)中的列着色。现在,我使用默认着色模式(scale_fill_brewer)分配颜色。
如何将颜色黑色分配给一个值(df $ type == -1),并使用scale_fill_brewer分配剩余的颜色? (所有其他df $类型都是一组从1到X的整数,其中X是唯一值的数量)
到目前为止,我已经能够通过找出scale_fill_brewer用于N个不同项目的颜色集,然后预测颜色黑色并将其传递到scale_fill_manual来手动执行。
rhg_cols1<- c("#000000","#F8766D","#7CAE00","#00BFC4","#C77CFF" ) ggplot(y=values,data=df,aes(x=name,fill=factor(type))) + geom_bar()+ scale_fill_manual(values = rhg_cols1)
问题是我需要一个解决方案,通过使用十六进制颜色计算器来计算scale_fill_brewer的十六进制值,无需手动分配颜色。
就像是:
ggplot(y=values,fill=factor(type))) + geom_bar()+ scale_fill_brewer(value(-1,"black")
谢谢!
编辑:该解决方案必须适用于30多种颜色,并适用于ColorBrewer的“Set2”
解决方法
包装RColorBrewer包含调色板,您可以使用函数brewer.pal返回您选择的调色板。
例如,一个5色的顺序蓝色调色板:
library(RColorBrewer) my.cols <- brewer.pal(5,"Blues") my.cols [1] "#EFF3FF" "#BDD7E7" "#6BAED6" "#3182BD" "#08519C"
您可以在?brewer.pal帮助文件中获取有效的调色板名称列表。这些名称与ColorBrewer网站上的名称相对应。
您现在可以使用或修改结果,并使用scale_manual_fill将其传递给ggplot,如您所建议的:
my.cols[1] <- "#000000" library(ggplot2) df <- data.frame(x=1:5,type=1:5) ggplot(df,aes(x=x,fill=factor(type))) + geom_bar(binwidth=1)+ scale_fill_manual(values = my.cols)