I tried to create 2 figures at the same time. I thought I could plot into each figure by specifying the desired axis as shown in the code below, but all of the data goes into the last created figure (here, fig2).
import matplotlib.pylab as pl
fig1 = pl.figure(figsize=(5, 5))
gs1 = pl.GridSpec(4, 4)
fig2 = pl.figure(figsize=(5, 5))
gs2 = pl.GridSpec(4, 4)
for axis_counter in range(11):
ax = pl.subplot(gs1[axis_counter])
ax.plot([0, 10], [0, 10])
When I run this nothing plots in the fig1 axes, it all goes into the fig2 axes even though I’m explicitly calling gs1 here. I imagine pylab is latching onto the last created figure, but that behavior does not make sense.
Advertisement
Answer
My recommendation is to never use pylab.
If your in an interactive console session, pyplot is ok. But really, you should use the object-oriented interface. That means:
- importing pyplot
- create a figure either directly or with axes via (
pyplot.subplots) - operate on those figures and axes directly.
In your case, this means:
from matplotlib import pyplot
fig1 = pyplot.figure(figsize=(5, 5))
gs1 = fig1.add_gridspec(4, 4)
fig2 = pyplot.figure(figsize=(5, 5))
gs2 = fig2.add_gridspec(3, 3)
for axis_counter in range(11):
ax = fig1.add_subplot(gs1[axis_counter])
ax.plot([0, 10], [0, 10])
ax = fig2.add_subplot(gs2[3])
ax.plot([0, 10], [0, 10])