r - 如何更改ggplot2的scale_fill_brewer中一个值的颜色值?

标签 r ggplot2 colors colorbrewer

我有一个 R 数据框 (df),我在 ggplot2 中将其绘制为条形图,并根据数据框中的列进行着色 (df$type) 。现在,我使用默认的着色模式 (scale_fill_brewer) 来分配颜色。

如何将黑色分配给一个值 (df$type == -1) 并使用 scale_fill_brewer 分配其余颜色? (所有其他 df$types 都是从 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,data=df, aes(x=name, 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)

enter image description here

关于r - 如何更改ggplot2的scale_fill_brewer中一个值的颜色值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075140/

相关文章:

r - 如何在Markdown中为PDF文档添加图像作为页眉/页脚

r - 图中的分页符(新页面)

r - 将基本 r 图保存为可以在多图中绘制的对象

javascript - 如何确定两种 HEX 颜色之间的差异?

javascript - 将渐变添加到颜色 slider

r - 如何在 R 中标记 x & y 轴上的点的坐标

R 下载文件重定向

r - data.table 和 .SDcols 与 Paste0 创建字符向量

r - 在ggplot中调整geom_bar(位置="dodge")

R - ggplot 线条颜色(使用 geom_line)不会改变