Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write text above the bars on a bar plot (Python)?

Tags:

I have this graph: example matplotlib bar plot I want to write the count above each column. These values are in the first and second lists. Can you help me solve this problem? I tried something without success.

This is the code for the graph:

countListFast = [1492.0, 497.0, 441.0, 218.0, 101.0, 78.0, 103.0] countListSlow = [1718.0, 806.0, 850.0, 397.0, 182.0, 125.0, 106.0]  errorRateListOfFast = ['9.09', '9.09', '9.38', '9.40', '7.89', '8.02', '10.00'] errorRateListOfSlow = ['10.00', '13.04', '14.29', '12.50', '14.29', '14.53', '11.11']  opacity = 0.4 bar_width = 0.35  plt.xlabel('Tasks') plt.ylabel('Error Rate') plt.xticks(range(len(errorRateListOfFast)),('[10-20)', '[20-30)', '[30-50)', '[50-70)','[70-90)', '[90-120)', ' [120 < )'), rotation=30)         plt.bar(np.arange(len(errorRateListOfFast))+ bar_width, errorRateListOfFast, bar_width, align='center', alpha=opacity, color='b', label='Fast <= 6 sec.') plt.bar(range(len(errorRateListOfSlow)), errorRateListOfSlow, bar_width, align='center', alpha=opacity, color='r', label='Slower > 6 sec.') plt.legend() plt.tight_layout() plt.show() 
like image 550
Parfi Avatar asked Nov 08 '16 14:11

Parfi


People also ask

How do you display a value on top of a bar chart in Python?

Call matplotlib. pyplot. barh(x, height) with x as a list of bar names and height as a list of bar values to create a bar chart. Use the syntax “for index, value in enumerate(iterable)” with iterable as the list of bar values to access each index, value pair in iterable.


2 Answers

plt.bar() returns a list of rectangles that can be used to position suitable text above each of the bars as follows:

import matplotlib.pyplot as plt import numpy as np  errorRateListOfFast = ['9.09', '9.09', '9.38', '9.40', '7.89', '8.02', '10.00'] errorRateListOfSlow = ['10.00', '13.04', '14.29', '12.50', '14.29', '14.53', '11.11']  # Convert to floats errorRateListOfFast = [float(x) for x in errorRateListOfFast] errorRateListOfSlow = [float(x) for x in errorRateListOfSlow]  opacity = 0.4 bar_width = 0.35  plt.xlabel('Tasks') plt.ylabel('Error Rate')  plt.xticks(range(len(errorRateListOfFast)),('[10-20)', '[20-30)', '[30-50)', '[50-70)','[70-90)', '[90-120)', ' [120 < )'), rotation=30) bar1 = plt.bar(np.arange(len(errorRateListOfFast)) + bar_width, errorRateListOfFast, bar_width, align='center', alpha=opacity, color='b', label='Fast <= 6 sec.') bar2 = plt.bar(range(len(errorRateListOfSlow)), errorRateListOfSlow, bar_width, align='center', alpha=opacity, color='r', label='Slower > 6 sec.')  # Add counts above the two bar graphs for rect in bar1 + bar2:     height = rect.get_height()     plt.text(rect.get_x() + rect.get_width() / 2.0, height, f'{height:.0f}', ha='center', va='bottom')  plt.legend() plt.tight_layout() plt.show() 

Giving you:

bars with column counts

ha='center' and va='bottom' refer to how the text is aligned in relation to the x and y co-ordinates, i.e. horizontal and vertical alignment.

like image 133
Martin Evans Avatar answered Oct 02 '22 18:10

Martin Evans


Check out the following link, it may help:

http://matplotlib.org/examples/api/barchart_demo.html

like image 45
lcastillov Avatar answered Oct 02 '22 19:10

lcastillov