pythonmatplotlib

How to adjust the size of one subplot independently of other subplots in a matplotlib figure?


I want to have horizontally aligned 3D and 2D plots, where the y-axis of the 2D plot is the same height as the z-axis of the 3D plot. The following code produces a default output:

import matplotlib.pyplot as plt
fig = plt.figure()
fig.set_size_inches(10, 4)
fig.subplots_adjust(wspace=0.5)

# 3D surface plot
ax1 = fig.add_subplot(121, projection="3d")
ax1.set(zlabel="Value")

# 2D line plot
ax2 = fig.add_subplot(122)
ax2.set(ylabel="Value")

plt.show() 

Differently sized subplots

I want to shrink down the right hand side 2D subplot so that the y-axis ("Value") is a similar height to (or preferably the same height as) the z-axis ("Value") on the 3D plot (ideally I want them to line up).

I haven't been able to find a way to change subplot sizes independently like this in matplotlib (setting relative ratios and gridspec don't seem able to achieve this).

Any help would be much appreciated.


Solution

  • You can use set_position() to change the dimensions of one of the subplot:

    plt.figure(1).axes[1].set_position([0.6,0.4,0.25,0.3])  # left, bottom, width, height
    

    It gives: res