使用 `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` 中的一致着色的主要内容,如果未能解决你的问题,请参考以下文章