I have the following code:
fig = plt.figure(figsize = (16,9))
ax1 = plt.subplot(3, 2, 1)
ax2 = plt.subplot(3, 2, 2)
ax3 = plt.subplot(3, 2, 3)
ax4 = plt.subplot(3, 2, 4)
ax5 = plt.subplot(3, 1, 3)
However, I would like the third row (the plot that spans two columns) to be reduced in height by half. How do I do this?
I am aware of this post: Matplotlib different size subplots but don't understand how I can change the height of the lowest plot that spans two columns.
To prevent confusion: I want to cut the lower plot in half (delete the part in red) and therefore make it smaller (height-wise).
The post you link to has the answers that will help you but the simplest way nowadays (since matplotlib-3.3.0) is probably to use plt.subplot_mosaic
and pass the height ratios to the gridspec_kw
argument.
e.g.
fig, axes = plt.subplot_mosaic("AB;CD;EE", gridspec_kw=dict(height_ratios=[1, 1, 0.5]))
which will give you
This returns axes
as a dictionary of Axes
with the name you give it, so you can plot with e.g.
axes["A"].plot([1, 2, 3], [1, 2, 3])
(you could also "double stack" your mosaic like so for the same effect without using gridspec_kw
)
fig, axes = plt.subplot_mosaic("AB;AB;CD;CD;EE")
If for some reason you don't want to (or can't) use suplot_mosaic
then you can do this with GridSpec
directly (example here).
from matplotlib.gridspec import GridSpec
fig = plt.figure()
gs = GridSpec(nrows=3, ncols=2, figure=fig, height_ratios=[1, 1, 0.5])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, 0])
ax4 = fig.add_subplot(gs[1, 1])
ax5 = fig.add_subplot(gs[2, :])
which will give you the same thing.