大型DataFrame按sscinames分组后绘制Top20类群热图求助
解决方案
1. 数据预处理:分组求和与筛选前20类群
用pandas完成数据读取、重复类群合并,再筛选出总计数最高的前20个类群:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 读取数据(可替换为你的文件路径,或用pd.read_clipboard()直接读取示例表格) df = pd.read_csv("your_data_file.csv", sep="\t") # 按sscinames分组,对所有样本列求和合并重复条目 grouped_df = df.groupby('sscinames').sum() # 计算每个类群的总计数,排序后取前20 grouped_df['total'] = grouped_df.sum(axis=1) top20_df = grouped_df.sort_values('total', ascending=False).drop('total', axis=1).head(20)
2. 绘制热图
用seaborn生成热图,调整样式提升可读性:
# 设置绘图基础风格 sns.set(font_scale=1.1) plt.figure(figsize=(12, 10)) # 绘制热图,可按需开启单元格数值标注 heatmap = sns.heatmap(top20_df, cmap="YlGnBu", annot=False, fmt="g", yticklabels=True, xticklabels=True) # 调整x轴标签角度避免重叠 plt.xticks(rotation=45, ha='right') plt.title('Top 20 Microbial Groups by Total Count') plt.tight_layout() plt.show()
可选调整
- 若需要显示单元格具体数值,将
annot参数设为True - 颜色映射
cmap可更换为viridis、RdBu_r等其他配色
内容的提问来源于stack exchange,提问作者sumitra sivaprakasam
相关产品推荐
相关产品推荐

