如何在R语言Plotly热图中为连续色条设置特定颜色?
可复现的R语言Plotly热图(多样本差异表达基因展示)
嘿,这里有一个完全可复现的R语言Plotly热图代码示例,专门用来可视化多样本中差异表达基因的Log2FC值,生成的是交互式热图,方便你探索数据细节:
1. 先加载所需的包
library(plotly)
2. 定义辅助函数(用于颜色映射的归一化)
这两个函数用来计算每列的最大/最小值(忽略NA值),后续用来统一热图的颜色刻度范围:
# 计算每列的最大值 colMax <- function(data) sapply(data, max, na.rm = TRUE) # 计算每列的最小值 colMin <- function(data) sapply(data, min, na.rm = TRUE)
3. 构造示例数据(模拟差异表达基因的Log2FC矩阵)
我补全了你提供的截断数据,模拟了6个基因在5个样本对比组中的Log2FC值:
test <- structure(list( `#Log2FC_00e41e6a` = c(0, 0, 0, 0, 0, 0), `#Log2FC_0730216b` = c(0, 0, 0, 2.85798206145049, 0, 0), `#Log2FC_07ccb4e9` = c(-2.92159741497064, 0, -2.32475763591175, 0, 0, 0), `#Log2FC_1426b4bf` = c(0, 0, 0, -2.95962954629017, 0, 0), `#Log2FC_2d7f8c31` = c(1.876543, 0, -1.23456, 3.12345, 0, -0.98765) ), row.names = paste0("Gene_", 1:6), # 给行命名为基因ID class = "data.frame" )
4. 数据预处理
把数据框转换为矩阵格式,方便Plotly处理:
heat_data <- as.matrix(test)
5. 生成交互式热图
p <- plot_ly( x = colnames(heat_data), y = rownames(heat_data), z = heat_data, type = "heatmap", # 用蓝-白-红渐变配色,对应下调、无差异、上调 colors = colorRamp(c("#2c7bb6", "#ffffbf", "#d7191c")), zmin = min(colMin(test)), # 全局最小值作为颜色刻度下限 zmax = max(colMax(test)), # 全局最大值作为颜色刻度上限 hoverinfo = "text", # 鼠标悬停时显示的详细信息 text = apply(heat_data, 1:2, function(x) paste0( "Gene: ", rownames(heat_data)[row(heat_data)], "<br>", "Sample: ", colnames(heat_data)[col(heat_data)], "<br>", "Log2FC: ", round(x, 2) )) ) %>% layout( title = "多样本差异表达基因Log2FC热图", xaxis = list(title = "样本对比组"), yaxis = list(title = "基因ID") ) # 显示热图 p
一些使用提示:
- 这个热图是交互式的,鼠标悬停就能查看每个基因在对应样本中的精确Log2FC数值;
- 颜色刻度是全局统一的,避免了不同样本组间颜色尺度不一致的问题;
- 你可以直接替换
test数据框为自己的真实数据,只要保证行是基因,列是样本对比组,值是Log2FC就行; - 如果需要调整配色,修改
colors参数里的颜色代码即可。
内容的提问来源于stack exchange,提问作者user324810
相关产品推荐
相关产品推荐

