pythonmatplotlibbar-chartplot-annotations

How to display the value on horizontal bars


I generated a bar plot, how can I display the value of the bar on each bar?

Current plot:

enter image description here

What I am trying to get:

enter image description here

My code:

import os
import numpy as np
import matplotlib.pyplot as plt
        
x = [u'INFO', u'CUISINE', u'TYPE_OF_PLACE', u'DRINK', u'PLACE', u'MEAL_TIME', u'DISH', u'NEIGHBOURHOOD']
y = [160, 167, 137, 18, 120, 36, 155, 130]

fig, ax = plt.subplots()    
width = 0.75 # the width of the bars 
ind = np.arange(len(y))  # the x locations for the groups
ax.barh(ind, y, width, color="blue")
ax.set_yticks(ind+width/2)
ax.set_yticklabels(x, minor=False)
plt.title('title')
plt.xlabel('x')
plt.ylabel('y')      
#plt.show()
plt.savefig(os.path.join('test.png'), dpi=300, format='png', bbox_inches='tight') # use format='svg' or 'pdf' for vectorial pictures

Solution

  • New in matplotlib 3.4.0

    There is now a built-in Axes.bar_label helper method to auto-label bars:

    fig, ax = plt.subplots()
    bars = ax.barh(indexes, values)
    
    ax.bar_label(bars)
    

    Note that for grouped/stacked bar plots, there will multiple bar containers, which can all be accessed via ax.containers:

    for bars in ax.containers:
        ax.bar_label(bars)
    

    More details: