如何用R语言绘制基因表达分析的可发表级热图
如何用R语言绘制基因表达分析的可发表级热图
嘿,我来帮你搞定这个可发表级别的基因表达热图!你手里有z-score数据和PAM聚类结果,刚好可以用R里的pheatmap包来实现——这个包做出来的图特别适配期刊发表需求,灵活度拉满。下面我一步步给你拆解操作:
第一步:准备数据与加载工具
首先得把你的数据整理成热图需要的格式,同时加载必要的R包:
# 先安装需要的包(如果还没装过) install.packages("pheatmap") install.packages("viridis") # 可选,提供更友好的色盲友好型配色 # 加载包 library(pheatmap) library(viridis)
接下来处理你的数据集(假设你的数据框名叫gene_data):
# 把基因名设为行名,方便后续热图识别 rownames(gene_data) <- gene_data$Gene.Name # 提取z-score表达矩阵(去掉Gene.Name列) expr_matrix <- gene_data[, -which(colnames(gene_data) == "Gene.Name")] # 提取最后一行的PAM聚类信息,然后从表达矩阵中移除这一行 cluster_info <- expr_matrix[nrow(expr_matrix), ] expr_matrix <- expr_matrix[-nrow(expr_matrix), ] # 把聚类信息转成数据框,作为热图的行注释 row_annotation <- data.frame(PAM_Cluster = as.factor(cluster_info)) rownames(row_annotation) <- rownames(expr_matrix) # 确保注释和基因行名对应
第二步:绘制基础热图
先画一个基础版本,确认数据没问题:
pheatmap(expr_matrix, annotation_row = row_annotation, # 加上PAM聚类的行注释 scale = "none", # 你的数据已经是z-score,不需要再标准化 show_rownames = TRUE, # 显示基因名 show_colnames = TRUE, # 显示样本名 treeheight_row = 0, # 如果你想直接用PAM聚类结果,关掉热图自带的行聚类树 treeheight_col = 20 # 样本聚类树的高度,按需调整 )
第三步:优化为发表级样式
接下来调整细节,让图符合期刊要求:
pheatmap(expr_matrix, annotation_row = row_annotation, scale = "none", show_rownames = TRUE, show_colnames = TRUE, treeheight_row = 0, treeheight_col = 20, color = colorRampPalette(c("navy", "white", "firebrick3"))(100), # 经典红蓝渐变配色,符合期刊偏好 # 也可以用色盲友好的viridis配色:color = viridis(100, direction = -1) border_color = NA, # 去掉单元格边框,让图更清爽 fontsize = 10, # 整体字体大小 fontsize_row = 8, # 基因名字体大小(如果基因多可以再调小) fontsize_col = 9, # 样本名字体大小 annotation_names_row = FALSE, # 去掉注释区的标题(如果不需要的话) legend_title = "Z-score", # 图例标题 legend_position = "right", # 图例位置 main = "Gene Expression Z-score Heatmap (PAM Clustering)" # 图的主标题 )
额外技巧:按PAM聚类排序基因
如果想让同一簇的基因放在一起显示,可以按PAM聚类结果排序后再绘图:
# 按照PAM聚类的簇对基因排序 sorted_genes <- rownames(row_annotation)[order(row_annotation$PAM_Cluster)] expr_matrix_sorted <- expr_matrix[sorted_genes, ] row_annotation_sorted <- row_annotation[sorted_genes, ] # 绘制排序后的热图 pheatmap(expr_matrix_sorted, annotation_row = row_annotation_sorted, scale = "none", show_rownames = TRUE, show_colnames = TRUE, treeheight_row = 0, treeheight_col = 20, color = colorRampPalette(c("navy", "white", "firebrick3"))(100), border_color = NA, fontsize = 10, fontsize_row = 8, fontsize_col = 9, annotation_names_row = FALSE, legend_title = "Z-score", main = "Gene Expression Z-score Heatmap (Sorted by PAM Clustering)" )
备注:内容来源于stack exchange,提问作者Alphonse Charbel




