if I have a series of subplots with one column and many rows, i.e.:
plt.subplot(4, 1, 1) # first subplot plt.subplot(4, 1, 2) # second subplot # ...
how can I adjust the height of the first N subplots? For example, if I have 4 subplots, each on its own row, I want all of them to have the same width but the first 3 subplots to be shorter, i.e. have their y-axes be smaller and take up less of the plot than the y-axis of the last plot in the row. How can I do this?
There are multiple ways to do this. The most basic (and least flexible) way is to just call something like:
import matplotlib.pyplot as plt plt.subplot(6,1,1) plt.subplot(6,1,2) plt.subplot(6,1,3) plt.subplot(2,1,2)
Which will give you something like this:
However, this isn't very flexible. If you're using matplotlib >= 1.0.0, look into using GridSpec. It's quite nice, and is a much more flexible way of laying out subplots.
Even though this question is old, I was looking to answer a very similar question. @Joe's reference to AxesGrid, was the answer to my question, and has very straightforward usage, so I wanted to illustrate that functionality for completeness.
import matplotlib.pyplot as plt ax1 = plt.subplot2grid((m, n), (row_1, col_1), colspan = width) ax2 = plt.subplot2grid((m, n), (row_2, col_2), rowspan = height) ax1.plot(...) ax2.plot(...)
Note that the max values for
n-1 respectively, as zero indexing notation is used.
Specifically addressing the question, if there were 5 total subplots, where the last subplot has twice the height as the others, we could use
ax1 = plt.subplot2grid((6, 1), (0, 0)) ax2 = plt.subplot2grid((6, 1), (1, 0)) ax3 = plt.subplot2grid((6, 1), (2, 0)) ax4 = plt.subplot2grid((6, 1), (3, 0)) ax5 = plt.subplot2grid((6, 1), (4, 0), rowspan=2) plt.show()