Tobitobitobi
Tobitobitobi

Reputation: 57

Maintain plot size of uneven subplots

I've been creating uneven subplots in matplotlib based on this question. The gridspec solution (third answer) worked a little better for me as it gives a bit more flexibility for the exact sizes of the subplots.

When I add a plot of a 2D array with imshow() the affected subplot is resized to the shape of the array. Is there any way to avoid that and keep the subplot-sizes (or rather aspect-ratio) fixed?

Here's the example code and the resulting image with the subplot-sizes I'm happy with:

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

# generate data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot
fig = plt.figure(figsize=(12, 9))

gs = gridspec.GridSpec(20, 20)

ax1 = fig.add_subplot(gs[0:5,0:11])
ax1.plot(x, y)
ax2 = fig.add_subplot(gs[6:11,0:11])
ax2.plot(y, x)
ax3 = fig.add_subplot(gs[12:20,0:11])
ax3.plot(y, x)
ax4 = fig.add_subplot(gs[0:9,13:20])
ax4.plot(x, y)
ax5 = fig.add_subplot(gs[11:20,13:20])
ax5.plot(y, x)

plt.show()

Ideal subplot sizes

This is what happens if I additionally plot data from a 2D array with the following lines (insert before plt.show):

2Ddata = np.arange(0, 10, 0.1).reshape(10, 10)
im = ax3.imshow(2Ddata, cmap='rainbow')

The figure with the resized subplot

How can I restore the original size of the subplot from ax3 (lower left corner)?

Upvotes: 0

Views: 650

Answers (1)

Tobitobitobi
Tobitobitobi

Reputation: 57

Including the line ax3.set_aspect('auto') seems to have solved the issue.

Upvotes: 1

Related Questions