# Subplots

Sometimes it is useful to show two complex plots side by side for a veiwer to compare. Matplotlib handles this situation with a single figure that has two plots on it.

The **subplot** command allows you to create axes on different portions of a grid that each figure contains.

```
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
```

The following command creates a subplot with 1 row, 2 columns, and sets the current axis to the first subplot axes.

```
plt.figure()
plt.subplot(1, 2, 1)
linear_data = np.array([1,2,3,4,5,6,7,8])
plt.plot(linear_data, '-o');
```

```
<IPython.core.display.Javascript object>
```

The following sets the axis to the second subplot axes and then plots exponential data on it. It uses the same figure as shown above.

Note that the third parameter, which sets which subplot will be used, is **1-indexed** and **not 0-indexed**.

```
exponential_data = linear_data**2
plt.subplot(1, 2, 2)
plt.plot(exponential_data, '-o');
```

Note that pyplot does not automatically lock axes between the two plots.

The following illustrates how to lock the y-axes of two subplots.

```
plt.figure()
ax1 = plt.subplot(1, 2, 1)
plt.plot(linear_data, '-o')
ax2 = plt.subplot(1, 2, 2, sharey=ax1)
plt.plot(exponential_data, '-o');
```

```
<IPython.core.display.Javascript object>
```

The **subplots** command can also create larger grids of axes.

It is an effective way to create large grids where everything has locked axes.

```
fig, ((ax1,ax2,ax3),
(ax4,ax5,ax6),
(ax7,ax8,ax9)) = plt.subplots(3, 3,
sharex=True,
sharey=True)
ax5.plot(linear_data, '-');
```

```
<IPython.core.display.Javascript object>
```