具有不同颜色块的子图

时间:2017-09-23 17:53:34

标签: python matplotlib subplot colorbar

我有一个2x3的等高线图子图。我想要两个水平颜色栏,一个用于前两列,一个用于第三列。我只能为每个列(因此,3个颜色栏)执行此操作,但我需要前两列的共享颜色栏。

以下是我的示例代码:

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

1 个答案:

答案 0 :(得分:2)

colorbar的ax参数允许指定创建颜色条的轴。如果对于第一个颜色条指定了前两列的轴,它将沿两个轴延伸。

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