堆积条显示 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.'
而且这种方法看起来很复杂,也许有人知道更好的方法。
不需要内部循环,只需计算累积的条形高度并在其中添加文本:
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()
我在另一个 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.'
而且这种方法看起来很复杂,也许有人知道更好的方法。
不需要内部循环,只需计算累积的条形高度并在其中添加文本:
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()