【问题标题】:Coloring minimum bars in seaborn FacetGrid barplot在 seaborn FacetGrid 条形图中为最小条着色
【发布时间】:2020-07-11 17:14:30
【问题描述】:

有什么简单的方法可以为 FacetGrid 的每个图自动着色(或以任何方式标记)最小/最大条形吗?

例如,如何在以下 16 个图的每一个上标记最小 Z 值?

df = pd.DataFrame({'A':[10, 20, 30, 40]*4, 'Y':[1,2,3,4]*4, 'W':range(16), 'Z':range(16)})
g = sns.FacetGrid(df, row="A", col="Y", sharey=False)
g.map(sns.barplot, "W", "Z")
plt.show()

【问题讨论】:

  • DataFrame 有点“奇怪”,是为了举例而生成的。

标签: matplotlib seaborn


【解决方案1】:

以下方法循环通过对角轴,每个轴搜索条的最小高度,然后为它们着色:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.DataFrame({'A': [10, 20, 30, 40] * 4, 'Y': [1, 2, 3, 4] * 4, 'W': range(16), 'Z': range(16)})
g = sns.FacetGrid(df, row="A", col="Y", sharey=False)
g.map(sns.barplot, "W", "Z")

for i in range(len(g.axes)):
    ax = g.axes[i, i]
    min_height = min([p.get_height() for p in ax.patches])
    for p in ax.patches:
        if p.get_height() == min_height:
            p.set_color('red')
plt.tight_layout()
plt.show()

【讨论】:

  • 那行得通。但是,我对其进行了修改以适用于所有图(而不仅仅是对角线)。
猜你喜欢
  • 2016-05-15
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多