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

如何用Python基于pandas数据框绘制指定基因对上色的矩阵图

你要的这种基因对矩阵热图,pandas本身没有内置的直接绘制接口,一般配合seaborn库实现,操作非常简单,步骤如下:

实现逻辑

首先把原始的基因对数据表转换为行列都是基因名的邻接矩阵,不存在的基因对对应位置填为NaN,绘图时NaN位置默认留空,仅对有数值的单元格按数值大小上色即可。

完整可运行代码

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 1. 预处理原始数据
# 示例数据构造,你实际使用时替换为pd.read_csv读取你的文件即可
df = pd.DataFrame({
    'gene1': ['TP53.', 'TP53.', 'IDH1.'],
    'gene2': ['FUBP1', 'CIC', 'NF1'],
    'pvalue': [6.381282e-09, 1.570489e-22, 1.946551e-05],
    'qvalue': [2.435575e-08, 7.055298e-22, 7.116265e-05]
})
# 去掉基因名末尾多余的小数点
df['gene1'] = df['gene1'].str.strip('.')
df['gene2'] = df['gene2'].str.strip('.')

# 2. 构造空白基因矩阵
all_genes = pd.unique(pd.concat([df['gene1'], df['gene2']]))
gene_matrix = pd.DataFrame(np.nan, index=all_genes, columns=all_genes)

# 3. 填充矩阵数值,这里用qvalue的负对数上色,数值越大显著性越强
for _, row in df.iterrows():
    g1, g2, q_val = row['gene1'], row['gene2'], row['qvalue']
    # 对称填充,适合无方向的基因对关系;如果是有向关系删掉下面第二行即可
    gene_matrix.loc[g1, g2] = -np.log10(q_val)
    gene_matrix.loc[g2, g1] = -np.log10(q_val)

# 4. 绘制矩阵图
plt.figure(figsize=(6, 6))
sns.heatmap(
    gene_matrix,
    cmap='Reds', # 可自定义配色,比如Blues、viridis都可以
    annot=True, # 不需要显示单元格数值的话改成False即可
    fmt='.1f',
    cbar_kws={'label': '-log10(qvalue)'},
    square=True, # 保证单元格是正方形,和示例效果一致
    linewidths=0.5 # 加单元格分隔线,可根据需求调整
)
plt.xlabel('Gene name')
plt.ylabel('Gene name')
plt.xticks(rotation=45)
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()

可调参数说明

  • 如果要按pvalue上色,把填充时的row['qvalue']改成row['pvalue']即可
  • 不需要显示数值直接删掉annot=True和fmt='.1f'两个参数即可
  • 要修改单元格颜色只需要替换cmap参数的取值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:45:01