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

R语言pheatmap热图修改列间隙颜色及合并分组列名问题问询

解决方法

你需要的两个效果都可以借助grid包实现,pheatmap基于grid绘图体系,我们可以在热图渲染完成后直接在对应位置添加元素。

完整可运行代码

library(pheatmap)
library(grid)

set.seed(123)
df <- data.frame(matrix(sample(30), ncol = 5))
colnames(df) <- LETTERS[1:5]
subj <- c("P1", "P2","Q1", "Q2", "T1","T2")
rownames(df) <- subj
aka2 = data.frame(ID = factor(rep(c("Pat","Trea"), each=3)))
rownames(aka2) <- subj
aka3 = list(ID = c(Pat = "white", Trea="blue"))

# 绘制热图,先隐藏原有的列名
p <- pheatmap(t(scale(df)),
         annotation_col = aka2, 
         annotation_colors = aka3[1],
         annotation_legend = FALSE,
         gaps_col =  c(2,4),
         show_colnames = F, # 隐藏原有的P1/P2等列名
         show_rownames = T, 
         cluster_rows = F, 
         cluster_cols = F, 
         legend = TRUE, 
         clustering_distance_rows = "euclidean", 
         border_color = FALSE)

# 定位到热图主体绘图区域
seekViewport("matrix")

# 1. 将间隙改为黑色:在间隙位置绘制黑色竖线,调整lwd参数控制黑线宽度覆盖白色间隙
grid.segments(x0 = c(2,4), 
              y0 = 0, 
              x1 = c(2,4), 
              y1 = 1, 
              gp = gpar(col = "black", lwd = 5)) # lwd设为5刚好匹配默认间隙宽度

# 2. 添加分组列名,在两组列的中间位置标注
grid.text(c("P","Q","T"), 
          x = c(1.5, 3.5, 5.5), # 分别对应P组、Q组、T组的中间位置
          y = unit(-1, "lines"), # 调整数值控制文字和热图的距离
          gp = gpar(fontsize = 12))

参数调整说明

  • 如果你不需要间隙完全是黑色,只需要加细边框线,把lwd参数改为1-2即可
  • 可以调整grid.text里的y参数和fontsize参数,修改列名的位置和大小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:48:04