堆积条显示 Matplotlib 中 2 个变量的百分比值?

Stacked bar showing percentage values for 2 variables in Matplotlib?

我在另一个 post 中看到了堆叠百分比条形图的代码,但是,我无法将其用于我的绘图。


data = {'Paid':[8045],'Not Paid':[1533]}
df = pd.DataFrame(data, index = [''])
df['Total'] = df['Paid']+df['Not Paid']

df_rel = (df[df.columns[0:2]].div(df.iloc[0, 2])*100).round(2)
df_rel

所以我想构建一个堆叠条形图,显示上面两个变量的百分比值:

df_rel.plot( kind='bar',stacked = True,mark_right = True) # this is ok

for n in df_rel:
    for i, (a,b,c) in enumerate(zip(df_rel.iloc[:,:][n], df[n], df_rel[n])):
         plt.text(a -b / 2, i, str(c) + '%', va = 'center', ha = 'center')  # this gives an error.

谁能帮我弄清楚哪里出了问题?我得到 'ValueError: Image size of 1318810x237 pixels is too large.'

而且这种方法看起来很复杂,也许有人知道更好的方法。

不需要内部循环,只需计算累积的条形高度并在其中添加文本:

Full example

df_rel.plot( kind='bar',stacked = True,mark_right = True) # this is ok
h = 0
for col in df_rel:
    h += (p := df_rel[col].iat[0])      # calculate current bar height
    plt.text(0, h - p / 2, f'{p}%', va='center', ha='center')
plt.show()