数据转换及按Cluster分组绘制Heatmap的可行性咨询
数据转换与分组热力图实现方案
一、数据格式转换
你需要把现有宽格式的DataFrame(每行对应1个样本,包含Cluster列和多列基因表达量)转成三列的长格式,用Pandas的melt()函数就能快速实现:
import pandas as pd # 假设原数据框名为df melted_df = df.melt( id_vars=['Cluster'], # 保留Cluster作为分组标识列 var_name='Gene', # 原基因列名转为Gene列的取值 value_name='Expression' # 原基因列的数值转为Expression列 )
执行后就能得到你想要的「Cluster + Gene + Expression」三列结构。
二、按Cluster分组制作热力图:完全可行
有两种常用实现思路,根据你的需求选择:
1. 绘制合并式热力图(按Cluster聚合基因表达)
如果想展示不同Cluster间的基因表达差异,可以先按Cluster和Gene分组计算平均表达量,再转成宽格式绘制热力图:
import seaborn as sns import matplotlib.pyplot as plt # 按Cluster和Gene分组计算平均表达,转回宽格式 cluster_gene_avg = melted_df.groupby(['Cluster', 'Gene'])['Expression'].mean().unstack() # 绘制带聚类的热力图 sns.clustermap(cluster_gene_avg, cmap='viridis', figsize=(12,6)) plt.show()
2. 分面绘制单个Cluster的样本表达热力图
如果想查看每个Cluster内部所有样本的基因表达分布,可以用分面网格实现:
# 用FacetGrid按Cluster分面,每个子图绘制对应Cluster的样本-基因表达热力图 g = sns.FacetGrid(df, col='Cluster', col_wrap=2) g.map_dataframe( sns.heatmap, yticklabels=False, # 隐藏样本行标签避免拥挤 xticklabels=True, cmap='viridis' ) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者user20388122
相关产品推荐
相关产品推荐

