基于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
相关产品推荐
相关产品推荐

