Matplotlib tutorial

Matplotlib tutorial shows how to create charts in Python with Matplotlib. We create a scatter chart, line chart, bar chart, and pie chart.

Matplotlib

Matplotlib is a Python library for creating charts. Matplotlib can be used in Python scripts, the Python and IPython shell, the jupyter notebook, web application servers, and four graphical user interface toolkits.

Matplotlib installation

Matplotlib is an external Python library that needs to be installed.

```\$ sudo pip install matplotlib
```

We can use the `pip` tool to install the library.

Matplotlib scatter chart

A scatter chart is a type of plot or mathematical diagram using Cartesian coordinates to display values for typically two variables for a set of data.

scatter.py
```#!/usr/bin/python3

import matplotlib.pyplot as plt

x_axis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis = [5, 16, 34, 56, 32, 56, 32, 12, 76, 89]

plt.title("Prices over 10 years")
plt.scatter(x_axis, y_axis, color='darkblue', marker='x', label="item 1")

plt.xlabel("Time (years)")
plt.ylabel("Price (dollars)")

plt.grid(True)
plt.legend()

plt.show()
```

The example draws a scatter chart. The chart displays the prices of some item over the period of ten years.

```import matplotlib.pyplot as plt
```

We import the `pyplot` from the `matplotlib` module. It is a collection of command style functions that create charts. It is similar in operation to MATLAB.

```x_axis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis = [5, 16, 34, 56, 32, 56, 32, 12, 76, 89]
```

We have data for x and y axes.

```plt.title("Prices over 10 years")
```

With the `title()` function, we set a title for the chart.

```plt.scatter(x_axis, y_axis, color='darkblue', marker='x', label="item 1")
```

The `scatter()` function draws the scatter chart. It accepts the data for the x and y axes, the color of the marker, the shape of the marker, and the label.

```plt.xlabel("Time (years)")
plt.ylabel("Price (dollars)")
```

We set the labels for the axes.

```plt.grid(True)
```

We show the grid with the `grid()` function. The grid consists of a number of vertical and horizontal lines.

```plt.legend()
```

The `legend()` function places a legend on the axes.

```plt.show()
```

The `show()` function displays the chart.

Two datasets

In the next example, we add another data set to the chart.

scatter2.py
```#!/usr/bin/python3

import matplotlib.pyplot as plt

x_axis1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis1 = [5, 16, 34, 56, 32, 56, 32, 12, 76, 89]

x_axis2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis2 = [53, 6, 46, 36, 15, 64, 73, 25, 82, 9]

plt.title("Prices over 10 years")

plt.scatter(x_axis1, y_axis1, color='darkblue', marker='x', label="item 1")
plt.scatter(x_axis2, y_axis2, color='darkred', marker='x', label="item 2")

plt.xlabel("Time (years)")
plt.ylabel("Price (dollars)")

plt.grid(True)
plt.legend()

plt.show()
```

The chart displays two data sets. We distinguish between them by the colour of the marker.

```x_axis1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis1 = [5, 16, 34, 56, 32, 56, 32, 12, 76, 89]

x_axis2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_axis2 = [53, 6, 46, 36, 15, 64, 73, 25, 82, 9]
```

We have two data sets.

```plt.scatter(x_axis1, y_axis1, color='darkblue', marker='x', label="item 1")
plt.scatter(x_axis2, y_axis2, color='darkred', marker='x', label="item 2")
```

We call the `scatter()` function for each of the sets.

Matplotlib line chart

A line chart is a type of chart which displays information as a series of data points called markers connected by straight line segments.

linechart.py
```#!/usr/bin/python3

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2.5 * np.pi * t)
plt.plot(t, s)

plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')

plt.title('Sine Wave')
plt.grid(True)

plt.show()
```

The example displays a sine wave line chart.

```import numpy as np
```

In the example, we also need the `numpy` module.

```t = np.arange(0.0, 3.0, 0.01)
```

The `arange()` function returns an evenly spaced list of values within the given interval.

```s = np.sin(2.5 * np.pi * t)
```

We get the `sin()` values of the data.

```plt.plot(t, s)
```

We draw the line chart with the `plot()` function.

Matplotlib bar chart

A bar chart presents grouped data with rectangular bars with lengths proportional to the values that they represent. The bars can be plotted vertically or horizontally.

barchart.py
```#!/usr/bin/python3

from matplotlib import pyplot as plt
from matplotlib import style

style.use('ggplot')

x = [0, 1, 2, 3, 4, 5]
y = [46, 38, 29, 22, 13, 11]

fig, ax = plt.subplots()

ax.bar(x, y, align='center')

ax.set_title('Olympic Gold medals in London')
ax.set_ylabel('Gold medals')
ax.set_xlabel('Countries')

ax.set_xticks(x)
ax.set_xticklabels(("USA", "China", "UK", "Russia",
"South Korea", "Germany"))

plt.show()
```

The example draws a bar chart. It shows the number of Olympic gold medals per country in London 2012.

```style.use('ggplot')
```

It is possible to use predefined styles.

```fig, ax = plt.subplots()
```

The `subplots()` function returns a figure and an axes object.

```ax.bar(x, y, align='center')
```

A bar chart is generated with the `bar()` function.

```ax.set_xticks(x)
ax.set_xticklabels(("USA", "China", "UK", "Russia",
"South Korea", "Germany"))
```

We set the country names for the x axis.

Matplotlib pie chart

A pie chart is a circular chart which is divided into slices to illustrate numerical proportion.

piechart.py
```#!/usr/bin/python3

import matplotlib.pyplot as plt

labels = ['Oranges', 'Pears', 'Plums', 'Blueberries']
quantity = [38, 45, 24, 10]

colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']

plt.pie(quantity, labels=labels, colors=colors, autopct='%1.1f%%',

plt.axis('equal')

plt.show()
```

The example creates a pie chart.

```labels = ['Oranges', 'Pears', 'Plums', 'Blueberries']
quantity = [38, 45, 24, 10]
```

We have labels and corresponding quantities.

```colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
```

We define colours for the pie chart's slices.

```plt.pie(quantity, labels=labels, colors=colors, autopct='%1.1f%%',
```

The pie chart is generated with the `pie()` function. The `autopct` is responsible for displaying percentages in the chart's wedges.

```plt.axis('equal')
```

We set an equal aspect ratio so that the pie is drawn as a circle.