matplotlib 基于单元格值突出显示行颜色

k3bvogb1  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(94)

matplotlib的cell color有问题下面是一个简单的代码,它在matplotlib的帮助下绘制了一个表格。但是,如果第4列中的某个数字的值为负,我希望将特定行着色为红色。没有得到任何地方,因为我只能填充一个单元格的颜色,而不是整行。

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pandas as pd

columns = ('1', '2', '3', '4', '5')
rows = ["A", "B"]
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')
i=0
for j, row in df.iterrows():
 
    if (float(df.iloc[j,3]) > 0):
        the_table.get_celld()[(i,j)].set_facecolor("blue")
    else:
        the_table.get_celld()[(i,j)].set_facecolor("green")
    i=i+1
plt.show()

字符串

nwlls2ji

nwlls2ji1#

我不太熟悉matplotlib的表格,但是你可以设置单元格的颜色,设置行的颜色可以用一个简单的for循环来完成:

...

for index, row in df.iterrows():
    if float(df.iloc[index, 3]) > 0:
        color = "green"
    else:
        color = "red"

    for col in range(df.shape[1]):
        # index + 1 because of headers row
        the_table[index + 1, col].set_facecolor(color)

...

字符串


的数据

gg0vcinb

gg0vcinb2#

事实上,the_table.get_celld()返回一个dict,所以你必须迭代元素才能给它们上色,因为set_facecolor方法适用于单元格而不是dict。

for j, row in df.iterrows():
    if float(df.iloc[j, 3]) > 0:
        cells_to_color = [c for (row, col), c in the_table.get_celld().items() if row == i]
        for c in cells_to_color:
            c.set_facecolor("blue")
    else:
        cells_to_color = [c for (row, col), c in the_table.get_celld().items() if row == i]
        for c in cells_to_color:
            c.set_facecolor("green")
    i = i + 1

字符串

相关问题