laolux
laolux

Reputation: 1565

matplotlib: colorbar make subplots unequal size

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()

Upvotes: 1

Views: 647

Answers (1)

Quang Hoang
Quang Hoang

Reputation: 150735

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

Upvotes: 2

Related Questions