仅在 matplotlib 中的堆叠条形图顶部添加总值
Add ONLY the total values on top of stacked bars in matplotlib
我正在使用以下条形图:
我想添加 仅 条形图顶部每个索引的总量,如下所示:
但是,当我使用下面的代码时,我只得到了每个柱的部分堆栈。
import matplotlib.pyplot as plt
data = [['0.01 - 0.1','A'],['0.1 - 0.5','B'],['0.5 - 1.0','B'],['0.01 - 0.1','C'],['> 2.5','A'],['1.0 - 2.5','A'],['> 2.5','A']]
df = pd.DataFrame(data, columns = ['Size','Index'])
### plot
df_new = df.sort_values(['Index'])
list_of_colors_element = ['green','blue','yellow','red','purple']
# Draw
piv = df_new.assign(dummy=1) \
.pivot_table('dummy', 'Index', 'Size', aggfunc='count', fill_value=0) \
.rename_axis(columns=None)
ax = piv.plot.bar(stacked=True, color=list_of_colors_element, rot=0, width=1)
ax.bar_label(ax.containers[0],fontsize=9)
# Decorations
plt.title("Index coloured by size", fontsize=22)
plt.ylabel('Amount')
plt.xlabel('Index')
plt.grid(color='black', linestyle='--', linewidth=0.4)
plt.xticks(range(3),fontsize=15)
plt.yticks(fontsize=15)
plt.show()
我尝试了不同种类的 ax.bar_label(ax.containers[0],fontsize=9)
,但 none 显示了柱的总数。
感谢任何帮助!
我不确定是否可以使用新的 bar_label
方法执行此操作,但您可以手动标记总计。
通过 piv.sum(axis=1)
和 annotate
计算行总数:
for x, y in enumerate(piv.sum(axis=1)):
ax.annotate(y, (x, y), ha='center')
我正在使用以下条形图:
我想添加 仅 条形图顶部每个索引的总量,如下所示:
但是,当我使用下面的代码时,我只得到了每个柱的部分堆栈。
import matplotlib.pyplot as plt
data = [['0.01 - 0.1','A'],['0.1 - 0.5','B'],['0.5 - 1.0','B'],['0.01 - 0.1','C'],['> 2.5','A'],['1.0 - 2.5','A'],['> 2.5','A']]
df = pd.DataFrame(data, columns = ['Size','Index'])
### plot
df_new = df.sort_values(['Index'])
list_of_colors_element = ['green','blue','yellow','red','purple']
# Draw
piv = df_new.assign(dummy=1) \
.pivot_table('dummy', 'Index', 'Size', aggfunc='count', fill_value=0) \
.rename_axis(columns=None)
ax = piv.plot.bar(stacked=True, color=list_of_colors_element, rot=0, width=1)
ax.bar_label(ax.containers[0],fontsize=9)
# Decorations
plt.title("Index coloured by size", fontsize=22)
plt.ylabel('Amount')
plt.xlabel('Index')
plt.grid(color='black', linestyle='--', linewidth=0.4)
plt.xticks(range(3),fontsize=15)
plt.yticks(fontsize=15)
plt.show()
我尝试了不同种类的 ax.bar_label(ax.containers[0],fontsize=9)
,但 none 显示了柱的总数。
感谢任何帮助!
我不确定是否可以使用新的 bar_label
方法执行此操作,但您可以手动标记总计。
通过 piv.sum(axis=1)
和 annotate
计算行总数:
for x, y in enumerate(piv.sum(axis=1)):
ax.annotate(y, (x, y), ha='center')