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

ComplexHeatmap绘制热图:X轴标签垂直与标题无法显示问题求助

解决ComplexHeatmap热图的两个问题:X轴标签方向与标题显示异常

问题1:X轴标签垂直显示,改为水平

当前代码未设置X轴标签旋转角度,加上列宽设置过小,导致标签自动垂直排列。直接在Heatmap()函数中添加column_names_rot = 0强制标签水平,同时适当调宽列宽避免重叠:

heatmap_plot <- Heatmap(xxx_data_matrix,  # 修正笔误:are_data_matrix → xxx_data_matrix
                        col = colorRamp2(breaks, colors),  # 用colorRamp2创建连续色阶,比直接传colors更准确
                        name = "logFC ",
                        show_row_names = TRUE,
                        row_names_gp = gpar(fontsize = 12),
                        column_names_gp = gpar(fontsize = 12),
                        column_names_rot = 0,  # 新增:强制X轴标签水平
                        height = nrow(xxx_data_matrix) * 15.5,
                        width = ncol(xxx_data_matrix) * 2  # 调宽列宽,避免标签拥挤
)

问题2:标题无法显示

你用grid.text()设置的y = 1.1超出了png绘图设备的可视范围(默认y轴范围0-1),导致标题被裁剪。推荐两种解决方法:

方法1:用ComplexHeatmap自带的标题参数

在draw()函数中直接设置main参数,自动适配绘图区域:

draw(heatmap_plot, 
     annotation_legend_side = "bot",
     main = "Differential Gene Expression in xxx Tomato",
     main_gp = gpar(fontface = "bold", fontsize = 14))

方法2:调整grid.text位置并扩大边距

如果坚持用grid.text(),需要在draw()时预留顶部边距,同时把y值调整到可视范围内:

draw(heatmap_plot, 
     annotation_legend_side = "bot",
     padding = unit(c(2, 1, 1, 1), "cm"))  # 顶部留2cm边距
grid.text("Differential Gene Expression in xxx Tomato", 
          x = 0.5, y = 0.95,  # y值设为0.95,确保在可视区域内
          gp = gpar(fontface = "bold", fontsize = 14))

完整修正后的代码

#Install and load libraries
if (!requireNamespace("BiocManager", quietly = TRUE)) {
  install.packages("BiocManager")
}
BiocManager::install("ComplexHeatmap")
install.packages("openxlsx")

library(ComplexHeatmap)
library(openxlsx)
library(circlize)
library(grid)

#Read excel file
xxx_data <- read.xlsx("xxx_DEgenes.xlsx", sheet = "xxx_Rel_Data")

#Set gene column as row name
rownames(xxx_data) <- xxx_data$gene
xxx_data_matrix <- as.matrix(xxx_data[, c("logFC_15min", "logFC_30min", "logFC_45min", "logFC_75min")])

#Rename matrix columns
colnames(xxx_data_matrix) <- c("logFC 15min", "logFC 30min", "logFC 45min", "logFC 75min")

#QC data is correctly loaded and transformed
print(str(xxx_data_matrix))

#Replace NA values with 0
xxx_data_matrix[is.na(xxx_data_matrix)] <- 0

#Create color mapping(用colorRamp2创建连续色阶,更准确)
breaks = c(-8, 0, 8)
colors = c("darkblue", "white", "red")
col_fun = colorRamp2(breaks, colors)

#Generate and save heatmap with adjusted width and height
png("xxx_heatmap.png", width = 3000, height = 2500)  # 调高height,容纳标题

#Create custom features
heatmap_plot <- Heatmap(xxx_data_matrix, 
                        col = col_fun,
                        name = "logFC ",
                        show_row_names = TRUE,
                        row_names_gp = gpar(fontsize = 12),
                        column_names_gp = gpar(fontsize = 12),
                        column_names_rot = 0,  # 强制X轴标签水平
                        height = nrow(xxx_data_matrix) * 15.5,
                        width = ncol(xxx_data_matrix) * 2  # 调宽列宽
)

# Print the heatmap with title
draw(heatmap_plot, 
     annotation_legend_side = "bot",
     main = "Differential Gene Expression in xxx Tomato",
     main_gp = gpar(fontface = "bold", fontsize = 14))

dev.off()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:23:24