2017-09-23 8 views
1

J'ai une sous-trame 2x3 de cartes de contour. Je veux avoir deux barres de couleurs horizontales, une pour les deux premières colonnes et une pour la troisième colonne. Je ne peux le faire que pour chaque colonne (donc, 3 colorbars), mais j'ai besoin d'une barre de couleurs partagée pour les deux premières colonnes.sous-trames avec des barres de couleurs différentes

Voici mon exemple de code:

import numpy as np 
import matplotlib.pyplot as plt 

v = np.arange(-180,181,15) 
y,x = np.meshgrid(v,v) 

p1 = 100*np.sin(x+y) 
p2 = 100*np.sin(2*x+y) 
p3 = 100*np.sin(3*x+y) 
p4 = 100*np.sin(4*x+y) 
p5 = 5*np.cos(x+5*y) 
p6 = 5*np.cos(x+6*y) 

f, ax = plt.subplots(2,3,sharex='row',sharey='col',figsize=(4,6)) 

mina = min(min(p1.reshape(625,)),min(p2.reshape(625,)),min(p3.reshape(625,)),min(p4.reshape(625,))) 
maxa = max(max(p1.reshape(625,)),max(p2.reshape(625,)),max(p3.reshape(625,)),max(p4.reshape(625,))) 
minb = min(min(p5.reshape(625,)),min(p6.reshape(625,))) 
maxb = max(max(p5.reshape(625,)),max(p6.reshape(625,))) 

ax[0,0].contourf(x,y,p1,20,vmin=mina,vmax=maxa) 
ax[0,0].set(adjustable='box-forced', aspect='equal') 
l0 = ax[1,0].contourf(x,y,p2,20,vmin=mina,vmax=maxa) 
ax[1,0].set(adjustable='box-forced', aspect='equal') 
ax[0,1].contourf(x,y,p3,20,vmin=mina,vmax=maxa) 
ax[0,1].set(adjustable='box-forced', aspect='equal') 
l1 = ax[1,1].contourf(x,y,p4,20,vmin=mina,vmax=maxa) 
ax[1,1].set(adjustable='box-forced', aspect='equal') 
ax[0,2].contourf(x,y,p5,20,vmin=minb,vmax=maxb) 
ax[0,2].set(adjustable='box-forced', aspect='equal') 
l2 = ax[1,2].contourf(x,y,p6,20,vmin=minb,vmax=maxb) 
ax[1,2].set(adjustable='box-forced', aspect='equal') 

f.colorbar(l0, ax=list(ax[:,0]),orientation='horizontal') 
f.colorbar(l1, ax=list(ax[:,1]),orientation='horizontal') 
f.colorbar(l2, ax=list(ax[:,2]),orientation='horizontal') 

plt.setp([a.get_xticklabels() for a in ax[0,:]], visible=False) 
plt.setp([a.get_yticklabels() for a in ax[:,1]], visible=False) 
plt.setp([a.get_yticklabels() for a in ax[:,2]], visible=False) 

plt.show() 

Répondre

2

L'argument ax de colorbar permet de spécifier les axes le long desquels le colorbar est créé. Si pour la première barre de couleurs vous spécifiez les axes des deux premières colonnes, elle s'étendra le long des deux.

f.colorbar(l0, ax=list(ax[1,0:2]),orientation='horizontal', pad=0.2) 
f.colorbar(l2, ax=ax[1,2],orientation='horizontal', aspect=10, pad=0.2) 

enter image description here