Python 如何注释堆叠条形图的每一段

Python 如何注释堆叠条形图的每一段,python,pandas,matplotlib,bar-chart,Python,Pandas,Matplotlib,Bar Chart,我一直在尝试用叠加条形图的值对每个子数量进行注释,如上图所示(值不准确,只是一个示例) 我使用的数据帧: 链接帖子与我的问题有些相似,但我不理解答案中给出的代码,也没有给出任何解释 导入和数据帧 将熊猫作为pd导入 将matplotlib.pyplot作为plt导入 数据={'var':['TR','AC','F&B'],'2019年第一季度':[66001256588],'2019年第二季度':[65661309586],'2019年第三季度':[73831525673]} df=pd.Da

我一直在尝试用叠加条形图的值对每个子数量进行注释,如上图所示(值不准确,只是一个示例)

我使用的数据帧:

链接帖子与我的问题有些相似,但我不理解答案中给出的代码,也没有给出任何解释

导入和数据帧
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
数据={'var':['TR','AC','F&B'],'2019年第一季度':[66001256588],'2019年第二季度':[65661309586],'2019年第三季度':[73831525673]}
df=pd.DataFrame(数据)
df.set_索引('var',in place=True)
#显示(df)
2019年第一季度2019年第二季度2019年第三季度
变量
TR 6600 6566 7383
AC 1256 1309 1525
餐饮58858673
matplotlib v3.4.2版开始更新
  • 使用
  • 有关其他格式选项,请参见页面
  • 使用
    pandas v1.2.4
    进行测试,该版本使用
    matplotlib
    作为绘图引擎
ax=df.T.plot.bar(叠加=True,figsize=(6,5),rot=0)
对于ax容器中的c:
ax.bar_标签(c,标签类型='center')
ax.图例(title='Categories',bbox_to_anchor=(1.05,1),loc='左上角')

注释资源-来自
matplotlib v3.4.2
原始答案-在matplotlib v3.4.2版之前
  • 数据帧,然后与
    stacked=True
    一起使用
  • 返回一个
    ndarray
    ,每列返回一个
    subplot=True
    • 在本图中,
      ax.patches
      包含9个对象,每个条的每个段对应一个对象。
      • 通过使用此对象的关联方法,可以提取
        高度
        宽度
        x
        y
        位置,并用于注释矩形
  • 这个问题与另一个问题的不同之处在于,另一个问题需要提取和使用标签的替代文本,并且这个数据帧需要转换
ax=df.T.plot.bar(叠加=True)
plt.图例(title='Categories',bbox_to_anchor=(1.05,1),loc='左上角')
对于i,枚举中的rect(ax.patches):
#找到所有东西的位置
高度=矩形。获取高度()
width=rect.get_width()
x=rect.get_x()
y=rect.get_y()
#条的高度是计数值,可以用作标签
label_text=f'{height:.0f}'
标签x=x+宽度/2
标签y=y+高度/2
#如果标签等于0,则不包括标签
如果高度>0.001:
ax.text(label_x,label_y,label_text,ha='center',va='center',fontsize=8)

使用Matplotlib 3.4.2更新更容易。
df.iloc[1:].T.plot(kind='bar', stacked=True)
plt.show()