You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:54:19