【问题标题】:How to create conditional coloring for matplotlib table values?如何为 matplotlib 表值创建条件着色?
【发布时间】:2020-04-15 02:47:54
【问题描述】:

如何向此表添加条件着色?

import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({'A':[16, 15, 14, 16],
                   'B': [3, -2, 5, 0],
                   'C': [200000, 3, 6, 800000],
                   'D': [51, -6, 3, 2]}) 

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

如何给A列和D列值大于等于15的表格添加条件着色,单元格为红色;否则它们是绿色的。如果 B 列和 C 列的值大于或等于 5,则单元格为红色;否则它们是绿色的。这应该是这样的:

【问题讨论】:

  • 这样的信息不会在文档中找到吗?顺便说一句,如果您使用的是更新版本的 Pandas,您可以将cellText=df.values.tolist() 替换为cellText=df.to_numpy(),否则只需使用cellText=df.values。另外,colLabels=df.columns.tolist() -> colLabels=df.columns
  • @AMC 我找不到任何解决条件格式的内容。我只看到cellColours 用于热图着色或手动单元格着色。谢谢你,我会按照你的建议进行更改。

标签: python pandas matplotlib


【解决方案1】:

生成列表列表并将其提供给 cellColours。确保列表列表包含与数据框中的行一样多的列表,并且列表列表中的每个列表包含与数据框中的列一样多的字符串。

import pandas as pd
import matplotlib.pyplot as plt


df = pd.DataFrame({'A':[16, 15, 14, 16],
                   'B': [3, -2, 5, 0],
                   'C': [200000, 3, 6, 800000],
                   'D': [51, -6, 3, 2]}) 

colors = []
for _, row in df.iterrows():
    colors_in_column = ["g", "g", "g", "g"]
    if row["A"]>=15:
        colors_in_column[0] = "r"
    if row["B"]>=5:
        colors_in_column[1] = "r"
    if row["C"]>5:
        colors_in_column[2] = "r"        
    if row["D"]>=15:
        colors_in_column[3] = "r"
    colors.append(colors_in_column)

fig, ax = plt.subplots(figsize=(10,5))
ax.axis('tight')
ax.axis('off')
the_table = ax.table(cellText = df.values, colLabels = df.columns, loc='center', cellColours=colors)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2013-01-30
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多