# python – How do I tell Matplotlib to create a second (new) plot, then later plot on the old one?

## python – How do I tell Matplotlib to create a second (new) plot, then later plot on the old one?

If you find yourself doing things like this regularly it may be worth investigating the object-oriented interface to matplotlib. In your case:

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

x = np.arange(5)
y = np.exp(x)
fig1, ax1 = plt.subplots()
ax1.plot(x, y)
ax1.set_title(Axis 1 title)
ax1.set_xlabel(X-label for axis 1)

z = np.sin(x)
fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure
ax2.plot(x, z)
ax3.plot(x, -z)

w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis
``````

It is a little more verbose but its much clearer and easier to keep track of, especially with several figures each with multiple subplots.

When you call `figure`, simply number the plot.

``````x = arange(5)
y = np.exp(5)
plt.figure(0)
plt.plot(x, y)

z = np.sin(x)
plt.figure(1)
plt.plot(x, z)

w = np.cos(x)
plt.figure(0) # Heres the part I need
plt.plot(x, w)
``````

Edit: Note that you can number the plots however you want (here, starting from `0`) but if you dont provide figure with a number at all when you create a new one, the automatic numbering will start at `1` (Matlab Style according to the docs).

#### python – How do I tell Matplotlib to create a second (new) plot, then later plot on the old one?

However, numbering starts at `1`, so:

``````x = arange(5)
y = np.exp(5)
plt.figure(1)
plt.plot(x, y)

z = np.sin(x)
plt.figure(2)
plt.plot(x, z)

w = np.cos(x)
plt.figure(1) # Heres the part I need, but numbering starts at 1!
plt.plot(x, w)
``````

Also, if you have multiple axes on a figure, such as subplots, use the `axes(h)` command where `h` is the handle of the desired axes object to focus on that axes.

(dont have comment privileges yet, sorry for new answer!)