How to create space between subplots?

KatieRose1029 picture KatieRose1029 · Dec 8, 2016 · Viewed 15.9k times · Source

The title pretty much says it all. I have a notebook containing two subplots and would like to create some space between them. They look too close to one another per say.

Answer

MSeifert picture MSeifert · Dec 8, 2016

With matplotlib.Figure.subplots_adjust:

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1, 2)

ax1.plot([1,2,3], [1,2,3])
ax2.plot([1,2,3], [3,2,1])
plt.show()

enter image description here

increasing the width can be done with the wspace parameter:

... # same setup as before
fig.subplots_adjust(wspace=2)
plt.show()

enter image description here

If you want to have even more control over the positioning of the axes then you can specify the offset (bottom and left) and the extend (width and height) of each of the axes as percentages of the figure.

It involves a bit of calculation to get right though:

import matplotlib.pyplot as plt

# All have the same lower border, height and width, only the distance to
# the left end of the figure differs
bottom = 0.05
height = 0.9
width = 0.15  # * 4 = 0.6 - minus the 0.1 padding 0.3 left for space
left1, left2, left3, left4 = 0.05, 0.25, 1 - 0.25 - width, 1 - 0.05 - width

rectangle1 = [left1, bottom, width, height]
rectangle2 = [left2, bottom, width, height]
rectangle3 = [left3, bottom, width, height]
rectangle4 = [left4, bottom, width, height]

# Create a 8 x 8 (quadratic) figure
plt.figure(1, figsize=(8, 8))

// Create 4 axes their position and extend is defined by the rectangles
ax1 = plt.axes(rectangle1)
ax2 = plt.axes(rectangle2)
ax3 = plt.axes(rectangle3)
ax4 = plt.axes(rectangle4)

# Let's display something in these axes.
ax1.plot([1,2,3,4])
ax2.plot([4,3,2,1])
ax3.plot([4,3,2,1])
ax4.plot([1,2,3,4])

plt.show()

enter image description here