How to display the value of the bar on each bar with pyplot.barh() How to display the value of the bar on each bar with pyplot.barh() python python

How to display the value of the bar on each bar with pyplot.barh()


Add:

for i, v in enumerate(y):    ax.text(v + 3, i + .25, str(v), color='blue', fontweight='bold')

result:

enter image description here

The y-values v are both the x-location and the string values for ax.text, and conveniently the barplot has a metric of 1 for each bar, so the enumeration i is the y-location.


I have noticed api example code contains an example of barchart with the value of the bar displayed on each bar:

"""========Barchart========A bar plot with errorbars and height labels on individual bars"""import numpy as npimport matplotlib.pyplot as pltN = 5men_means = (20, 35, 30, 35, 27)men_std = (2, 3, 4, 1, 2)ind = np.arange(N)  # the x locations for the groupswidth = 0.35       # the width of the barsfig, ax = plt.subplots()rects1 = ax.bar(ind, men_means, width, color='r', yerr=men_std)women_means = (25, 32, 34, 20, 25)women_std = (3, 5, 2, 3, 3)rects2 = ax.bar(ind + width, women_means, width, color='y', yerr=women_std)# add some text for labels, title and axes ticksax.set_ylabel('Scores')ax.set_title('Scores by group and gender')ax.set_xticks(ind + width / 2)ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5'))ax.legend((rects1[0], rects2[0]), ('Men', 'Women'))def autolabel(rects):    """    Attach a text label above each bar displaying its height    """    for rect in rects:        height = rect.get_height()        ax.text(rect.get_x() + rect.get_width()/2., 1.05*height,                '%d' % int(height),                ha='center', va='bottom')autolabel(rects1)autolabel(rects2)plt.show()

output:

enter image description here

FYI What is the unit of height variable in "barh" of matplotlib? (as of now, there is no easy way to set a fixed height for each bar)


Use plt.text() to put text in the plot.

Example:

import matplotlib.pyplot as pltN = 5menMeans = (20, 35, 30, 35, 27)ind = np.arange(N)#Creating a figure with some fig sizefig, ax = plt.subplots(figsize = (10,5))ax.bar(ind,menMeans,width=0.4)#Now the trick is here.#plt.text() , you need to give (x,y) location , where you want to put the numbers,#So here index will give you x pos and data+1 will provide a little gap in y axis.for index,data in enumerate(menMeans):    plt.text(x=index , y =data+1 , s=f"{data}" , fontdict=dict(fontsize=20))plt.tight_layout()plt.show()

This will show the figure as:

bar chart with values at the top