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

如何基于单元格值为Matplotlib表格行设置高亮颜色?

解决Matplotlib表格整行着色问题

原代码的问题在于只对单个对角线单元格设置了颜色,既没有遍历整行的所有列,也搞错了表格的行索引对应关系——Matplotlib表格里,行0是列标题行,数据行从行1开始,对应DataFrame的第0到第n-1行。

要实现「第4列数值为负时整行设为红色」的需求,只需遍历每一行的所有列单元格,根据第4列的数值判断后统一设置颜色:

import matplotlib.pyplot as plt
import pandas as pd

columns = ('1', '2', '3', '4', '5')
cell_text = [
    ['1348','12','177','-0.12','1.7'],
    ['2315','12','174','-0.05','2.1'],
    ['1147','11','137',' 0.02','2.4'],
    ['1375','11','128',' 0.1','3.4']
]

df = pd.DataFrame(cell_text)

fig, ax = plt.subplots()
ax.axis('tight')
ax.axis('off')
the_table = ax.table(cellText=df.values, colLabels=columns, loc='center')

# 遍历DataFrame的每一行
for row_idx, row in df.iterrows():
    # 转换第4列(索引3)的数值为float,判断是否为负
    val = float(row[3])
    # 表格中数据行的索引是row_idx + 1(跳过列标题行)
    table_row_num = row_idx + 1
    # 遍历该行的所有列(0到4)
    for col_idx in range(len(columns)):
        cell = the_table.get_celld()[(table_row_num, col_idx)]
        if val < 0:
            cell.set_facecolor('red')
        # 可根据需求设置非目标行的颜色,这里用白色作为默认
        else:
            cell.set_facecolor('white')

plt.show()

关键细节:

  • 行索引对应:DataFrame的第row_idx行对应表格的row_idx + 1行,要跳过列标题行
  • 整行着色核心:对目标行的所有列单元格循环设置背景色,而非单个单元格
  • 数值处理:float()会自动忽略字符串里的空格,能直接处理原数据中带空格的数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:35:08