Matplotlib Tutorial
Python Java C++ C C# PHP R SQL DS Algo InterviewQ

Matplotlib - Bar Plot



A bar plot (or bar chart) is a graph that presents categorical data with rectangular bars with heights or lengths proportional to the values that they represent. The bars can be plotted vertically or horizontally.

The matplotlib.pyplot.bar() functions makes a bar plot. The bars are positioned at x with the given alignment. Their dimensions are given by height and width. The vertical baseline is bottom (default 0). Many parameters can take either a single value applying to all bars or a sequence of values, one for each bar.

Syntax

matplotlib.pyplot.bar(x, height, width=0.8, 
                   bottom=None, align='center')

Parameters

x Required. Specify the x coordinates of the bars. float or array-like.
height Required. Specify the heights of the bars. float or array-like.
width Optional. Specify the widths of the bars. float or array-like. Default is 0.8.
bottom Optional. Specify the y coordinates of the bars bases. float or array-like. Default is 0.
align Optional. Specify the alignment of the bars to the x coordinates. Default is 'center'. To align the bars on the right edge pass a negative width and align='edge'.

  • 'center': Center the base on the x positions.
  • 'edge': Align the left edges of the bars with the x positions.

Example:

In the example below, a bar plot is drawn on a dataset containing information about number of student studying different languages.

import matplotlib.pyplot as plt
import numpy as np

#creating dataset
langs = ["Java", "C#", "Python", "PHP", "C++", "C"]
students = [50, 40, 90, 30, 60, 50]

fig = plt.figure()
ax = fig.add_subplot(111)

#creating bar plot
ax.bar(langs, students)

plt.show()

The output of the above code will be:

Bar Plot

Example: Horizontal bar plot

To draw a horizontal bar plot matplotlib.pyplot.barh() can be used which has same functionality as matplotlib.pyplot.bar(). Please consider the example below.

import matplotlib.pyplot as plt
import numpy as np

#creating dataset
langs = ["Java", "C#", "Python", "PHP", "C++", "C"]
students = [50, 40, 90, 30, 60, 50]

fig = plt.figure()
ax = fig.add_subplot(111)

#creating bar plot
ax.barh(langs, students)

plt.show()

The output of the above code will be:

Bar Plot

Example: Multiple bar plot

Multiple bar plot is drawn by controlling the thickness and the positions of the bars. In the example below, data of number of students studying three different languages for last four years is created. To draw the bar plot of this data, the width of the bar is set to 0.25 units and each bar is shifted 0.25 units from the previous one.

import matplotlib.pyplot as plt
import numpy as np

#creating dataset
X = np.arange(4)
X_label = ['2016', '2017', '2018', '2019']
st_cpp = [50, 55, 60, 70]
st_java = [60, 65, 70, 80]
st_python = [50, 65, 75, 100]
students = [st_cpp, st_java, st_python]

fig = plt.figure()
ax = fig.add_subplot(111)

#creating bar plot
ax.bar(X - 0.25, students[0], color = 'b', width = 0.25)
ax.bar(X, students[1], color = 'r', width = 0.25)
ax.bar(X + 0.25, students[2], color = 'g', width = 0.25)

#formatting axes
ax.set_ylabel("Number of students")
ax.set_xlabel("Years")
ax.set_xticks(X)
ax.set_xticklabels(X_label)
ax.legend(["C++", "Java", "Python"])

plt.show()

The output of the above code will be:

Bar Plot

Example: Stacked bar plot

Stacked bar plot is drawn by controlling the bottom position of the bars. In the example below, data of male and female students for last five years is created. To draw the stacked bar plot of this data, the bottom of second bar plot is set to the height of the first bar plot.

import matplotlib.pyplot as plt
import numpy as np

#creating dataset
X = ['2016', '2017', '2018', '2019', '2020']
st_male = [55, 60, 60, 70, 75]
st_female = [60, 58, 70, 60, 70]
students = [st_male, st_female]

fig = plt.figure()
ax = fig.add_subplot(111)

#creating bar plot
ax.bar(X, students[0], color = 'b')
ax.bar(X, students[1], color = 'r', bottom = students[0])

#formatting axes
ax.set_ylabel("Number of students")
ax.set_xlabel("Years")
ax.legend(["Male", "Female"])

plt.show()

The output of the above code will be:

Bar Plot

5