如何为Pandas DataFrame按单列绘制类似Excel条件格式的热图
实现方案
你要的每列单独应用同色阶热图(类似Excel按列设置条件格式)的效果,有两种常用实现方式:
方案1:Pandas 内置 Styler(最接近Excel效果,支持导出带格式文件)
这个方案直接复用Pandas自带的样式渲染能力,渲染效果和Excel条件格式完全一致,支持直接在Jupyter中预览,也可导出为带格式的Excel或HTML文件。
import pandas as pd import numpy as np # 你的示例DataFrame df = pd.DataFrame(np.random.randint(0.1, 100, size = 30).reshape(5,6), columns= ['A','B','C','D','E','F'], index = ['aa','bb', 'cc', 'dd', 'ee']) # 生成按列着色的热图样式 styled_df = df.style.background_gradient( cmap="RdYlGn", # 可自定义颜色梯度,可选'Blues'/'viridis'/'OrRd'等 axis=0, # 核心参数:axis=0表示按列单独计算颜色映射范围,实现每列独立生效 vmin=None, vmax=None # 如需使用全局统一的数值映射范围,可手动指定这两个参数 ) # Jupyter环境直接运行变量名styled_df即可预览效果,导出用以下代码: # styled_df.to_excel("带色阶的表格.xlsx", engine="openpyxl") # styled_df.to_html("带色阶的表格.html")
方案2:Seaborn heatmap 适配实现
适合需要生成静态可视化图片、用于报告或论文的场景,核心逻辑是先对每列做独立的min-max归一化,用归一化后的数据计算颜色,原始数据做标注展示。
import seaborn as sns import matplotlib.pyplot as plt # 按列做min-max归一化,用于颜色计算 df_normalized = df.apply( lambda x: (x - x.min())/(x.max() - x.min()) if x.max() != x.min() else 0.5, axis=0 ) # 绘制热图 plt.figure(figsize=(7, 3)) sns.heatmap( df_normalized, # 用归一化后的数据计算颜色 annot=df, # 标注展示原始数值 fmt="g", # 禁用科学计数法显示 cmap="RdYlGn", cbar=True, # 可设置为False隐藏颜色条 xticklabels=df.columns, yticklabels=df.index ) plt.show()
注意事项
如果某列所有数值完全一致,min-max归一化会出现除零错误,上述方案2的lambda函数中已经加了兼容判断,遇到全值相同的列会统一映射到色阶中间值。
内容的提问来源于stack exchange,提问作者windcheater
相关产品推荐
相关产品推荐

