使用 `scale_colour_manual` 或替代方法(有时)缺少因子水平时,`ggplot2` 中的一致着色

Posted

技术标签:

【中文标题】使用 `scale_colour_manual` 或替代方法(有时)缺少因子水平时,`ggplot2` 中的一致着色【英文标题】:Consistent colouring in `ggplot2` when factor levels are (sometimes) missing using `scale_colour_manual` or an alternative 【发布时间】:2019-09-06 04:10:01 【问题描述】:

我有一个df 和一个调色板cp

df <- data.frame(x = c(1,2,3), y = c(1,1,1), col = c(1,2,3), 
        label = c("one", "two", "three"))
cp <- c("#9986A5", "#79402E", "#0F0D0E")

我可以用 cp 中的相应颜色绘制标签:

library(ggplot2)
ggplot(df, aes(x, y)) + geom_text(aes(label = label, color = as.factor(col)))
  + scale_colour_manual(values = cp)

但是,当缺少因子水平时,颜色会变得不一致:

df$col <- c(1,1,3)
ggplot(df, aes(x, y)) + geom_text(aes(label = label, color = as.factor(col))) 
  + scale_colour_manual(values = cp)

如何实现与缺失因子水平无关的一致着色?

【问题讨论】:

您是否尝试过在绘图时忽略缺失的级别?或者,您可以估算缺失的水平并进行绘图。或者您可以从原始数据框中创建一个没有缺失值的数据框并进行绘图。 【参考方案1】:

如果您使用命名向量来指定您的调色板,级别将与颜色一致地匹配:

cp <- c(`1` = "#9986A5", `2` = "#79402E", `3` = "#0F0D0E")

您必须引用数字才能使它们作为向量的名称。

【讨论】:

【参考方案2】:

我发现在比例尺中使用drop = FALSE ...手动调用对于解决未表示的因子水平导致色标不一致的问题非常有帮助。

【讨论】:

以上是关于使用 `scale_colour_manual` 或替代方法(有时)缺少因子水平时,`ggplot2` 中的一致着色的主要内容,如果未能解决你的问题,请参考以下文章

Rbrewer 调色板元素的颜色名称

在 ggplot 中编辑图例(文本)标签

如何更改图例中的标签?

在R中为三种不同的后验分布添加带有ggplot的标签[重复]

测试使用

第一篇 用于测试使用