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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:46:29