bjarkemoensted
bjarkemoensted

Reputation: 2766

How to increase the size of a single subfigure with pyplot/gridspec?

I'm trying to plot 23 graphs in a 6x4 grid, with one figure taking up twice the width of the other figures. I'm using gridspec and my current code is:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec

x = np.arange(0, 7, 0.01)

fig = plt.figure(figsize=(6, 4))
gs = gridspec.GridSpec(nrows=6, ncols=4)

for n in range(22):
    ax = fig.add_subplot(gs[n])
    ax.plot(x, np.sin(0.2*n*x))

corrax = fig.add_subplot(gs[22])
fig.tight_layout()
plt.show()

This produces the following:

Figure grid

I want to increase the width of the rightmost plot in the bottom row so it takes up the remaining space in that row. Is there a way to accomplish this?

Upvotes: 2

Views: 3147

Answers (2)

ImportanceOfBeingErnest
ImportanceOfBeingErnest

Reputation: 339112

You can use slices to select several positions from the gridspec, e.g. gs[22:24].

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec

x = np.arange(0, 7, 0.01)

fig = plt.figure(figsize=(6, 4))
gs = gridspec.GridSpec(nrows=6, ncols=4)

for n in range(22):
    ax = fig.add_subplot(gs[n])
    ax.plot(x, np.sin(0.2*n*x))

corrax = fig.add_subplot(gs[22:24])
corrax.plot(x,np.sin(0.2*22*x), color="crimson", lw=3)
fig.tight_layout()
plt.show()

enter image description here

You can also slice the gridspec two-dimensionally. E.g. to create a 3x3 grid and make the plot in the lower right corner span two columns and two rows, you could slice like gs[1:,1:].

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec

x = np.arange(0, 7, 0.01)

fig = plt.figure(figsize=(6, 4))
gs = gridspec.GridSpec(nrows=3, ncols=3)

for n in range(3):
    ax = fig.add_subplot(gs[0,n])
    ax.plot(x, np.sin(0.2*n*x))
    if n !=0:
        ax = fig.add_subplot(gs[n,0])
        ax.plot(x, np.sin(0.2*n*x))

corrax = fig.add_subplot(gs[1:,1:])
corrax.plot(x,np.sin(0.2*22*x), color="crimson", lw=3)
fig.tight_layout()
plt.show()

enter image description here

Upvotes: 5

chi
chi

Reputation: 11

#corrax = fig.add_subplot(gs[5,2:])
corrax = fig.add_subplot(6,4,(23,24))

both shold work.

Upvotes: 0

Related Questions