如何在R语言中创建数值越小颜色越深的单色系热力图?
用R语言生成数值越小颜色越深的单色系热力图
方法1:使用pheatmap包
pheatmap是绘制热力图的常用工具,要实现数值越小颜色越深的单色系效果,核心是自定义颜色渐变方向:
- 加载所需包并生成示例数据
- 用
colorRampPalette创建从深到浅的单色系渐变(深色在前、浅色在后,对应小数值到大数据值) - 在
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语法,可将矩阵转为长格式后绘制:
- 加载tidyverse工具包(包含ggplot2和数据转换工具)
- 把宽格式矩阵转成长格式
- 用
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
相关产品推荐
相关产品推荐

