## Subplots in matplotlib

In a previous post we learned how to use matplotlib’s `gridspec`

to make subplots of unequal size. `gridspec`

is quite powerful, but can be a little complicated to use. This is especially true if you are coming to Python from Matlab.

In the current post we learn how to make figures and subplots in a manner that will be more familiar to those who know Matlab.

### Importing modules and creating data to plot

The first thing we need to do is import `matplotlib.pyplot`

for plotting and `numpy`

to calculate the cosine of some data. To save on typing we will import these libraries using aliases:

```
import matplotlib.pyplot as plt
import numpy as np
# Create data
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
Y = np.cos(X)
```

### A basic plot

The simplest plot requires a single line of code:

```
plt.plot(X, Y)
```

The resulting figure is show below. `plt.plot()`

is similar to Matlab’s `plot()`

function. In this case it is plotting the `Y`

values against the `X`

values.

### Working with subplots

A slightly more complicated figure can be achieved by splitting things into various subplots. The following example creates an 8 inch x 8 inch figure with 2 rows and 2 columns of subplots, resulting in a total of 4 subplots.

```
plt.figure(figsize=(8,8))
plt.subplot(2,2,1)
plt.plot(X, Y, color="blue")
plt.title('subplot(2,2,1)')
plt.subplot(2,2,2)
plt.plot(X, Y*-1, color="red")
plt.title('subplot(2,2,2)')
plt.subplot(2,2,3)
plt.plot(X, Y*-1, color="green")
plt.title('subplot(2,2,3)')
plt.subplot(2,2,4)
plt.plot(X, Y, color="black")
plt.title('subplot(2,2,4)')
```

As can be seen in the code above, subplots are specified using `plt.subplot()`

, similar to Matlab’s `subplot()`

. The three values passed to this command `(rows, columns, subplot_id)`

. In the above example we wanted 2 columns and 2 rows. The third number specified the current subplot; any plotting after the `plt.subplot()`

command appears on the subplot specified by `subplot_id`

. In the figure below, the input to `plt.subplot()`

is included in the title of each subplot. Subplots start at `1`

and go from left to right in the first row, and then left to right in all subsequent rows.

### Subplots of unequal size

Similar to Matlab, it is possible to pass more than one value as the `subplot_id`

. This results in a subplot that occupies the space of the specified subplots.

```
plt.figure(figsize=(8,8))
plt.subplot(2,2,1)
plt.plot(X, Y, color="blue")
plt.title('subplot(2,2,1)')
plt.subplot(2,2,2)
plt.plot(X, Y*-1, color="red")
plt.title('subplot(2,2,2)')
plt.subplot(2,2,(3,4))
plt.plot(X, Y*-1, color="green")
plt.plot(X, Y, color="black")
plt.title('subplot(2,2,(3,4))')
```

In the code above, the third call to `plt.subplot()`

specified two values for the `subplot_id`

. Specifically, we provide `(3,4)`

as the `subplot_id`

, which means this subplot will occupy the space of the third and fourth subplots in a 2 row by 2 column grid. This corresponds to the entire bottom row, and is illustrated in the figure below.

To make sure this concept is clear, a second example is provided where the `subplot_id`

is `(2,4)`

. In a 2 row by 2 column grid, this corresponds to a subplot that occupies the entire right column. This is illustrated in the figure below.

### Summary

Including subplots is simple in matplotlib and the similarity between `plt.subplot()`

and Matlab’s `subplot()`

commands should help make the transition to Python easier.