leroygr - 10 months ago 118
Python Question

# Annotate bars with values on Pandas bar plots

I looking for a way to annotate my bars in a Pandas bar plot with the values (rounded) in my DataFrame.

>>> df=pd.DataFrame({'A':np.random.rand(2),'B':np.random.rand(2)},index=['value1','value2'] )
>>> df
A         B
value1  0.440922  0.911800
value2  0.588242  0.797366


I would like to get something like this:

I tried with this, but the annotations are all centered on the xthicks:

>>> ax = df.plot(kind='bar')
>>> for idx, label in enumerate(list(df.index)):
for acc in df.columns:
value = np.round(df.ix[idx][acc],decimals=2)
ax.annotate(value,
(idx, value),
xytext=(0, 15),
textcoords='offset points')


In [35]: for p in ax.patches:

You'll want to tweak the string formatting and the offsets to get things centered, maybe use the width from p.get_width(), but that should get you started. May not worked with stacked barplots unless you track the offsets somewhere.