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

如何绘制按行独立缩放颜色的热力图?

实现每行独立颜色缩放的热力图

嘿,我懂你想要的效果啦——让热力图里的每一行都用自己独立的颜色刻度来展示数据,这样每行内部的数值差异能更直观地凸显出来,而不是被全局的颜色范围给掩盖。咱们直接一步步来实现:

首先,先把你给出的初始数据生成代码整理好,确保数据是正确的:

library(tidyverse)
library(data.table)

# 生成初始数据
data_heat <- expand.grid(y = letters[seq(from = 1, to = 6)], 
                         x = LETTERS[seq(from = 1, to = 10)]) %>% 
  as.data.table()
setkey(data_heat, y)
data_heat[, fill_value := seq(from = 1, to = nrow(data_heat))]

接下来是关键步骤:对每行的数据做独立归一化。因为默认的热力图是用全局的颜色映射,所以我们需要把每行的fill_value转换成相对值(比如映射到0-1的范围),这样每行的最大值对应颜色的最深色,最小值对应最浅色。

用data.table的分组操作就能轻松实现:

# 按y分组,对每行的fill_value进行归一化
data_heat[, scaled_value := (fill_value - min(fill_value)) / (max(fill_value) - min(fill_value)), by = y]

现在就可以绘制热力图了,用归一后的scaled_value作为填充变量,这样每行的颜色缩放就是独立的:

ggplot(data_heat, aes(x = x, y = y, fill = scaled_value)) +
  geom_tile(color = "white") + # 白色边框区分每个单元格
  scale_fill_viridis_c(option = "plasma", name = "相对值") + # 选个好看的配色,你也可以换其他渐变
  labs(x = "X轴", y = "Y轴", title = "每行独立颜色缩放的热力图") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签,避免重叠

这样一来,你就能看到每一行的颜色都是根据自己行内的数值范围来变化的,每行的最小值都是最浅的颜色,最大值都是最深的颜色,完美实现你想要的效果!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:05