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

如何在Pandas DataFrame表格的col2列添加Excel式条件格式数据条

实现Matplotlib表格单元格的数据条条件格式

直接上解决方案:我们可以在自定义的render_mpl_table函数里新增逻辑,针对指定列绘制数据条。核心思路是先渲染基础表格,再遍历目标列的单元格,根据数值相对大小绘制填充矩形,模拟Excel的数据条效果。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

def render_mpl_table(data, col_width=3.0, row_height=0.625, font_size=14,
                     header_color='#40466e', row_colors=['#f1f1f2', 'w'], edge_color='w',
                     bbox=[0, 0, 1, 1], header_columns=0,
                     ax=None, data_bar_col=None):  # 新增参数指定要加数据条的列
    if ax is None:
        size = (col_width * data.shape[1], row_height * data.shape[0])
        fig, ax = plt.subplots(figsize=size)
        ax.axis('off')
    
    # 渲染基础表格
    mpl_table = ax.table(cellText=data.values, colLabels=data.columns,
                         bbox=bbox, colWidths=[col_width]*data.shape[1])
    
    mpl_table.auto_set_font_size(False)
    mpl_table.set_fontsize(font_size)
    
    # 设置表格基础样式
    for k, cell in mpl_table._cells.items():
        cell.set_edgecolor(edge_color)
        if k[0] == 0:
            cell.set_text_props(weight='bold', color='w')
            cell.set_facecolor(header_color)
        else:
            cell.set_facecolor(row_colors[k[0]%len(row_colors)])
    
    # 绘制数据条逻辑
    if data_bar_col is not None:
        col_idx = data.columns.get_loc(data_bar_col)
        # 归一化目标列数值到0-1区间,用于计算数据条宽度比例
        col_values = data[data_bar_col].values
        norm_vals = (col_values - col_values.min()) / (col_values.max() - col_values.min())
        
        # 遍历目标列的每个单元格(跳过表头行)
        for row_idx in range(1, data.shape[0]+1):
            cell = mpl_table[(row_idx, col_idx)]
            # 获取单元格的位置和尺寸
            x, y, w, h = cell.get_bbox().bounds
            # 加边距避免数据条贴满单元格
            padding = 0.05 * w
            bar_width = (w - 2*padding) * norm_vals[row_idx-1]
            # 创建数据条矩形
            bar = Rectangle((x + padding, y + padding*2), bar_width, h - padding*4,
                           facecolor='#56b4e9', alpha=0.7)
            ax.add_patch(bar)
            # 确保单元格文字显示在数据条上方
            cell.set_zorder(1)
    
    return ax

# 测试用DataFrame
df = pd.DataFrame({
    'col1': ['A', 'B', 'C', 'D', 'E'],
    'col2': [12, 45, 23, 78, 36]
})

# 生成带col2数据条的表格
render_mpl_table(df, data_bar_col='col2')
plt.show()

关键细节说明

  • 通过data_bar_col参数指定目标列,灵活适配不同需求
  • 数值归一化处理,保证数据条宽度能准确反映该列数值的相对大小
  • 加入边距优化视觉效果,避免数据条与单元格边界过度贴合
  • 设置单元格zorder确保文字不会被数据条遮挡
  • 数据条的颜色、透明度可通过facecolor和alpha参数自定义调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:27:40