如何在Matplotlib堆叠柱状图顶部标注总计数值
解决堆叠柱状图顶部标注总计数值的问题
你可以通过遍历x轴刻度位置,结合已计算的df['total']数值,在每个堆叠柱的顶部添加总计标注。以下是修改后的完整代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame() df['year'] = ['2012','2013','2014'] df['test 1'] = [4,17,5] df['test 2'] = [1,4,1] df['test 2a'] = [1,1,2] df['test 3'] = [2,1,8] df['test 4'] = [2,1,5] df['test 4a'] = [2,1,7] df = df.set_index('year') df['total'] = df.sum(axis=1) fig, ax = plt.subplots(1,1) df.drop(columns=['total']).plot(kind='bar', stacked=True, ax=ax) # 保留每个分段的中心标注(如果不需要可删除这段) for c in ax.containers: ax.bar_label(c, label_type='center') # 标注每个堆叠柱顶部的总计数值 for x, total in zip(ax.get_xticks(), df['total']): # x是每个柱的中心位置,total是堆叠高度,va='bottom'让文字在柱顶上方 ax.text(x, total, f'{total}', horizontalalignment='center', verticalalignment='bottom', fontweight='bold') plt.show()
关键说明:
ax.get_xticks()获取每个堆叠柱的中心x坐标,和df['total']的数值一一对应ax.text()的verticalalignment='bottom'确保文字在柱顶上方,避免和柱体重叠- 如果不需要分段的中心标注,直接删除循环
ax.containers的代码块即可
内容的提问来源于stack exchange,提问作者Medulla Oblongata
相关产品推荐
相关产品推荐

