如何基于单元格值为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
相关产品推荐
相关产品推荐

