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

如何在ggplot中自定义包含非数据值的分档填充调色板?

解决方案

要实现「z值小于15用同色,15-20每个值单独配色(含数据中未出现的19、20)」的需求,核心是先把z变量转换为包含所有目标类别的因子,再配合手动调色板完成设置:

代码实现

library(ggplot2) # 注意原代码中`ggplot`应为`ggplot2`
library(viridis)

df <- data.frame(x = c(10:15), y = c(20:25), z = c(8, 14, 15, 17, 18, 9))

# 将z变量转换为指定水平的因子:<15归为一组,15-20各为单独类别
df$z_cat <- factor(
  ifelse(df$z < 15, "低于15", as.character(df$z)),
  levels = c("低于15", as.character(15:20))
)

# 自定义调色板:给每个类别分配对应颜色
# 示例用viridis色系,可根据需求替换颜色值
custom_palette <- c(
  "低于15" = viridis(7)[1],
  setNames(viridis(6)[2:7], 15:20)
)

ggplot(df, aes(x = x, y = z)) +
  geom_tile(aes(fill = z_cat)) +
  scale_fill_manual(values = custom_palette, name = "z值") +
  scale_y_continuous(limits = c(0, 60)) +
  scale_x_continuous(limits = c(0, 60)) +
  theme_classic()

关键细节

  • 转换因子时通过levels参数强制包含15-20所有值,确保图例能覆盖完整范围,哪怕数据里没有19、20
  • 调色板用setNames绑定颜色与对应类别,避免配色错位
  • 若要调整颜色,直接修改custom_palette中的颜色代码即可,比如把「低于15」的颜色换成固定灰色"#AAAAAA"

内容的提问来源于stack exchange,提问作者jandraor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:36:10