How do I tell Matplotlib to create a second (new) plot, then later plot on the old one? How do I tell Matplotlib to create a second (new) plot, then later plot on the old one? python 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 pltimport numpy as npx = 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 figureax2.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 it's 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) # Here's the part I needplt.plot(x, w)

Edit: Note that you can number the plots however you want (here, starting from 0) but if you don't 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).


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) # Here's 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.

(don't have comment privileges yet, sorry for new answer!)