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

R语言pheatmap修改轴文本样式后原有黑色文字重叠如何解决

问题原因

文本重叠是因为修改grob参数后未清空原有画布缓存,直接输出热图会在已经渲染完成的黑色原始文本上,再叠加绘制一层修改样式后的彩色文本,最终出现叠印效果。

解决方案

方案1:使用grid.edit直接修改渲染对象(推荐)

无需手动定位grob索引,适配不同版本pheatmap,不会出现索引失效问题,也不会触发叠印:

library(pheatmap) ; library(grid)
data <- replicate(16, rnorm(16))
rownames(data) <- paste0("OTU", c(1:nrow(data)))
colnames(data) <- paste("Sample", c(1:ncol(data)))
data = as.data.frame(data)
data$regulation = rep(c("up", "down"), each = 8)
data$colors = ifelse(data$regulation == "up", "green", "red")

# 绘制热图
p = pheatmap(data[, 1:15])
# 匹配排序后的颜色
cols = data[order(match(rownames(data), p$gtable$grobs[[5]]$label)), ]$colors
# 直接修改行标签样式
grid.edit("ROW_NAMES", grep = TRUE, global = FALSE, gp = gpar(col = cols, fontsize = 20, fontface = "bold"))

如果需要修改列名颜色,将上述代码中的ROW_NAMES替换为COL_NAMES即可。

方案2:原gtable修改方法补充清屏步骤

如果你习惯直接修改gtable的grobs参数,只需要在修改完成后先清空当前画布再重绘热图,即可避免叠印:

library(pheatmap) ; library(grid)
data <- replicate(16, rnorm(16))
rownames(data) <- paste0("OTU", c(1:nrow(data)))
colnames(data) <- paste("Sample", c(1:ncol(data)))
data = as.data.frame(data)
data$regulation = rep(c("up", "down"), each = 8)
data$colors = ifelse(data$regulation == "up", "green", "red")

# 绘制热图
p = pheatmap(data[, 1:15])
cols = data[order(match(rownames(data), p$gtable$grobs[[5]]$label)), ]$colors
p$gtable$grobs[[5]]$gp = gpar(col = cols, fontsize = 20, fontface = "bold")
# 清空当前画布后重绘
grid.newpage()
grid.draw(p)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:06:08