R ggplot2 geom_tile实现逻辑值为1时按分组设置差异化填充色
实现方法
你可以通过构造合并填充规则的映射值实现需求,不需要叠加多层geom或者写复杂的条件映射,两种常用写法如下:
方法1:提前在数据框中生成填充映射列(逻辑最清晰,不易出错)
先根据规则生成专门用于填充映射的列:plot.fill=0时统一标记为不需要填充的标识,plot.fill=1时保留原Group值,再统一配置色板即可。
library(ggplot2) # 生成映射列 df$fill_col <- ifelse(df$plot.fill == 0, "empty", as.character(df$Group)) ggplot(df, aes(x = Name, y = Level, fill = fill_col)) + geom_tile(colour = "grey70") + # 加浅灰边框区分白色瓦片和画布 scale_fill_manual( name = "Group", # 自定义图例标题 breaks = c("A", "B", "C"), # 图例仅展示有效分组,隐藏空填充项 values = c( "A" = "blue", "B" = "red", "C" = "yellow", "empty" = "white" ) )
方法2:直接在aes内生成映射值(不修改原始数据)
如果不想改动原数据框,可以直接在fill映射内写判断逻辑,注意要把因子类型的Group转为字符型,避免返回因子数值编码导致映射错乱:
ggplot(df, aes(x = Name, y = Level, fill = ifelse(plot.fill == 1, as.character(Group), "empty"))) + geom_tile(colour = "grey70") + scale_fill_manual( name = "Group", breaks = c("A", "B", "C"), values = c("A" = "blue", "B" = "red", "C" = "yellow", "empty" = "white") )
两种写法最终效果一致:plot.fill为0的瓦片统一填充白色,plot.fill为1的瓦片按照所属Group自动匹配对应填充色。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

