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()