Home > Software engineering >  matplotlib: colorbar make subplots unequal size
matplotlib: colorbar make subplots unequal size

Time:06-07

I make two subplots with a common shared colorbar. So naturally I want to plot the colorbar only once. However, when I do so, then my subplots become unequal in size. How to place the colorbar outside the subplots on the right?

subplots with unequal size

Minimal working example below

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

res = 100
x = np.linspace(0, 2*np.pi, res)

y = np.sin(x)
z = np.cos(x)
y2 = -np.sin(x) 0.4
z2 = 0.5*np.cos(2*x)

fig_width = 200/25.4                                                                                       
fig_height = 100/25.4                                                                                      
fig = plt.figure(figsize=(fig_width, fig_height))                                                          
gs = fig.add_gridspec(1, 2, wspace=0)                                                                      
(ax, ax2) = gs.subplots(sharey='row') 
images = []
images.append(ax.scatter(x, y, c=z))
images.append(ax2.scatter(x, y2, c=z2))
vmin = min(image.get_array().min() for image in images)
vmax = max(image.get_array().max() for image in images)
norm = colors.Normalize(vmin=vmin, vmax=vmax)
for im in images:
    im.set_norm(norm)
cbar = fig.colorbar(images[0], ax=ax2)
cbar.set_label("mylabel", loc='top')
fig.tight_layout()
plt.show()

CodePudding user response:

Try 1) pass the two axes as ax, and 2) move tight_layout before colorbar:

# other stuff
fig.tight_layout()
cbar = plt.colorbar(images[0], ax=(ax,ax2))
# other - other stuff

Output:

enter image description here

  • Related