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

基于Pandas数据集绘制自定义分色对角热图咨询

对角热图绘制完整实现方案

以下为可直接运行的Python实现代码,完全匹配需求的配色规则、对角展示、分子缩写支持要求:

步骤1:模拟样例数据(实际使用时替换为你的真实数据即可)

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

# 模拟原始数据样例,50种分子的情况只需替换该部分数据结构即可
raw_data = pd.DataFrame({
    "molecule": ["MOL001", "MOL002", "MOL003", "MOL004", "MOL005"],
    "Median_own": [1.2, 3.5, 2.1, 4.8, 0.9],
    "significance": [0, 1, 1, 0, 1],
    "well_behaved": ["", "*", "**", "", "*"]
})

步骤2:构造对角矩阵

仅对角位置保留有效值,其余位置统一设为NaN:

# 提取全量分子列表
mol_list = raw_data["molecule"].tolist()
mol_count = len(mol_list)

# 初始化行列均为分子名的全NaN矩阵
diag_value_mat = pd.DataFrame(np.nan, index=mol_list, columns=mol_list) # 存储Median_own真实值
diag_color_mat = pd.DataFrame(np.nan, index=mol_list, columns=mol_list) # 存储配色分类标签

# 仅填充对角位置的数值和配色标签
for idx, mol in enumerate(mol_list):
    mol_info = raw_data[raw_data["molecule"] == mol].iloc[0]
    diag_value_mat.loc[mol, mol] = mol_info["Median_own"]
    # 按规则打配色标签:0=浅红、1=中红、2=深红
    if mol_info["significance"] == 0:
        diag_color_mat.loc[mol, mol] = 0
    elif mol_info["significance"] == 1:
        diag_color_mat.loc[mol, mol] = 2 if mol_info["well_behaved"] == "**" else 1

步骤3:自定义绘图(支持分子缩写)

# 自定义配色规则,NaN值默认显示为白色
custom_red_cmap = sns.color_palette(["#ffcccc", "#ff6666", "#cc0000"])
custom_red_cmap.set_bad(color="white")

# 分子缩写映射,不需要缩写可跳过该重命名步骤
mol_abbr_map = {
    "MOL001": "M1",
    "MOL002": "M2",
    "MOL003": "M3",
    "MOL004": "M4",
    "MOL005": "M5"
}
plot_color_mat = diag_color_mat.rename(index=mol_abbr_map, columns=mol_abbr_map)
plot_value_mat = diag_value_mat.rename(index=mol_abbr_map, columns=mol_abbr_map)

# 绘制热图
plt.figure(figsize=(20, 20), dpi=100) # 50种分子建议用20*20尺寸保证清晰度
sns.heatmap(
    plot_color_mat,
    cmap=custom_red_cmap,
    vmin=0,
    vmax=2,
    annot=plot_value_mat, # 对角位置显示Median_own真实值,不需要显示可设为False
    fmt=".2f", # 数值保留两位小数,可自行调整
    cbar=False, # 不需要色条可保留该参数,需要显示色条删除该行即可
    square=True,
    linewidths=0.3,
    linecolor="lightgray"
)
# 调整坐标轴标签可读性
plt.xticks(rotation=45, ha="right")
plt.yticks(rotation=0)
plt.xlabel("分子名称")
plt.ylabel("分子名称")
plt.title("分子Median_own对角热图")
plt.tight_layout()
plt.show()

可调整参数说明

  • 三种红色的色值可根据视觉需求自行替换,当前色值区分度符合科研绘图通用标准
  • 分子缩写映射可根据你的实际分子名自行扩展,不需要缩写直接删除重命名逻辑即可
  • 50种分子绘图时可适当调大figsize、缩小linewidths保证内容清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:06:02