python条形图数据标签_python – 将标签添加到堆积条形图

我正在绘制某些类别中各个办事处的交叉列表.我想把一个水平堆积的条形图放在一起,每个办公室及其值都标有标签.

这是一些示例代码:

df = pd.DataFrame({'office1': pd.Series([1,np.nan,np.nan], index=['catA', 'catB', 'catC']),

'office2': pd.Series([np.nan,8,np.nan], index=['catA', 'catB', 'catC']),

'office3': pd.Series([12,np.nan,np.nan], index=['catA', 'catB', 'catC']),

'office4': pd.Series([np.nan,np.nan,3], index=['catA', 'catB', 'catC']),

'office5': pd.Series([np.nan,5,np.nan], index=['catA', 'catB', 'catC']),

'office6': pd.Series([np.nan,np.nan,7], index=['catA', 'catB', 'catC']),

'office7': pd.Series([3,np.nan,np.nan], index=['catA', 'catB', 'catC']),

'office8': pd.Series([np.nan,np.nan,11], index=['catA', 'catB', 'catC']),

'office9': pd.Series([np.nan,6,np.nan], index=['catA', 'catB', 'catC']),

})

ax = df.plot.barh(title="Office Breakdown by Category", legend=False, figsize=(10,7), stacked=True)

这给了我一个很好的起点:

但是,我想拥有的是:

经过一些研究,我想出了以下代码,正确排列了“类别”轴上的标签:

def annotateBars(row, ax=ax):

for col in row.index:

value = row[col]

if (str(value) != 'nan'):

ax.text(value/2, labeltonum(row.name), col+","+str(value))

def labeltonum(label):

if label == 'catA':

return 0

elif label == 'catB':

return 1

elif label == 'catC':

return 2

df.apply(annotateBars, ax=ax, axis=1)

但这并不考虑杆的“堆叠”.我也尝试迭代plot命令返回的补丁容器(可以让我检索每个矩形的x和y位置),但是我失去了与办公室标签的任何连接.

你可能感兴趣的:(python条形图数据标签)