首页 > 解决方案 > 在堆积条形图中显示每个部分的边界

问题描述

有一个像这样的DataFrame:

data= {"A":[10,9], "B":[4,3],"C":[0,4]}
df= pd.DataFrame(data=data, index= ["Jan", "Feb"])

看起来像:

        A   B   C   
   Jan  10  4   0   
   Feb  9   3   4   

我用堆叠的条形构建了一个情节。(图片在最后)

ax = df.plot(kind="bar",stacked=True,figsize=(16,9))
for c in ax.containers:
    ax.bar_label(c, label_type='center')

每列都有一个不应超过的边界值。

borders = {"A": 8, "B":4, "C": 3}

现在我想在图中显示边界,但是为整个图形建立一条恒定线是不够的。每个酒吧都需要自己的边界呈现。

在此处输入图像描述

标签: pythonpandasmatplotlibplotseaborn

解决方案


您可以使用 遍历dfpandas.DataFrame.iterrows(),因此您可以查看每个条形并跟踪三条红线,每列一条。
高度:

  • 第一条红线仅取决于'A'边框,因此每个条的高度始终相同
  • 第二条红线取决于实际'A'值加上'B'边框,因此每个条的高度都是可变的
  • 第三条红线取决于实际'A' + 'B'值加上'C'边框,因此每个条的高度都是可变的

我使用k计数器在酒吧之间移动。

k = 0
for i, _ in df.iterrows():
    ax.plot([k - 0.25, k + 0.25], [borders['A'], borders['A']], 'r')
    ax.plot([k - 0.25, k + 0.25], [borders['B'] + df.loc[i, 'A'], borders['B'] + df.loc[i, 'A']], 'r')
    ax.plot([k - 0.25, k + 0.25], [borders['C'] + df.loc[i, 'A'] + df.loc[i, 'B'], borders['C'] + df.loc[i, 'A'] + df.loc[i, 'B']], 'r')
    k += 1

在此处输入图像描述


推荐阅读