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

如何在R语言中创建数值越小颜色越深的单色系热力图?

用R语言生成数值越小颜色越深的单色系热力图

方法1:使用pheatmap包

pheatmap是绘制热力图的常用工具,要实现数值越小颜色越深的单色系效果,核心是自定义颜色渐变方向:

  1. 加载所需包并生成示例数据
  2. 用colorRampPalette创建从深到浅的单色系渐变(深色在前、浅色在后,对应小数值到大数据值)
  3. 在pheatmap函数中指定color参数,按需调整美化选项

代码示例:

# 首次使用需安装包
# install.packages("pheatmap")
library(pheatmap)

# 生成示例数据
X = matrix(runif(1000,0,1),100,10)
rownames(X) = paste("Var", 1:100, sep = "")
colnames(X) = paste("Var", 1:10, sep = "")

# 创建单色系渐变:深灰到浅灰(可替换为蓝色系如c("#00008B", "#ADD8E6"))
my_colors = colorRampPalette(c("#333333", "#EEEEEE"))(100)

# 绘制热力图
pheatmap(X, 
         color = my_colors,
         main = "数值越小颜色越深的单色系热力图",
         show_rownames = FALSE, # 行过多时可隐藏行名
         show_colnames = TRUE)

方法2:使用ggplot2包

如果偏好ggplot2语法,可将矩阵转为长格式后绘制:

  1. 加载tidyverse工具包(包含ggplot2和数据转换工具)
  2. 把宽格式矩阵转成长格式
  3. 用geom_tile绘制热力图,通过scale_fill_gradient的direction = 2参数实现低数值对应深色

代码示例:

# 首次使用需安装包
# install.packages("tidyverse")
library(tidyverse)

# 生成示例数据
X = matrix(runif(1000,0,1),100,10)
rownames(X) = paste("Var", 1:100, sep = "")
colnames(X) = paste("Var", 1:10, sep = "")

# 转换为长格式数据
X_df = as.data.frame(X) %>%
  rownames_to_column("row_var") %>%
  pivot_longer(cols = -row_var, names_to = "col_var", values_to = "value")

# 绘制热力图
ggplot(X_df, aes(x = col_var, y = row_var, fill = value)) +
  geom_tile() +
  scale_fill_gradient(low = "#333333", high = "#EEEEEE", direction = 2) +
  labs(title = "数值越小颜色越深的单色系热力图",
       x = "列变量", y = "行变量", fill = "数值") +
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank())

关键说明

  • 单色系可灵活替换:比如蓝色系low = "#003366", high = "#CCE5FF"、深绿到浅绿low = "#006400", high = "#90EE90",按需调整即可
  • 渐变细腻度:colorRampPalette(...)中的数字(如示例中的100)决定颜色过渡的平滑程度,数值越大过渡越自然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:50:17