How to plot in multiple subplots

442,128

Solution 1

There are several ways to do it. The subplots method creates the figure along with the subplots that are then stored in the ax array. For example:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

enter image description here

However, something like this will also work, it's not so "clean" though since you are creating a figure with subplots and then add on top of them:

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

enter image description here

Solution 2

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

enter image description here

Solution 3

  • You can also unpack the axes in the subplots call

  • And set whether you want to share the x and y axes between the subplots

Like this:

import matplotlib.pyplot as plt
# fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
ax1, ax2, ax3, ax4 = axes.flatten()

ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()

2 x 2 plot

Solution 4

You might be interested in the fact that as of matplotlib version 2.1 the second code from the question works fine as well.

From the change log:

Figure class now has subplots method The Figure class now has a subplots() method which behaves the same as pyplot.subplots() but on an existing figure.

Example:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()

Solution 5

Read the documentation: matplotlib.pyplot.subplots

pyplot.subplots() returns a tuple fig, ax which is unpacked in two variables using the notation

fig, axes = plt.subplots(nrows=2, ncols=2)

The code:

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

does not work because subplots() is a function in pyplot not a member of the object Figure.

Share:
442,128

Related videos on Youtube

bugsyb
Author by

bugsyb

Updated on November 28, 2021

Comments

  • bugsyb
    bugsyb over 2 years

    I am a little confused about how this code works:

    fig, axes = plt.subplots(nrows=2, ncols=2)
    plt.show()
    

    How does the fig, axes work in this case? What does it do?

    Also why wouldn't this work to do the same thing:

    fig = plt.figure()
    axes = fig.subplots(nrows=2, ncols=2)
    
  • Leevo
    Leevo almost 5 years
    I get what ax is, but not what is fig. What are they?
  • Khalil Al Hooti
    Khalil Al Hooti almost 5 years
    ax is actually a numpy array. fig is matplotlib.figure.Figure class through which you can do a lot of manipulation to the plotted figure. for example, you can add colorbar to specific subplot, you can change the background color behind all subplots. you can modify the layout of these subplots or add a new small ax to them. preferably you might want a single main title for all subplots which can be obtained through fig.suptitle(title) method. finally once you are happy with the plot, you can save it using fig.savefig method. @Leevo