подзаголовки с разными цветовыми полосами

У меня есть подзаголовок контурных карт размером 2x3. Я хочу иметь две горизонтальные шкалы цветов: одну для первых двух столбцов и одну для третьего столбца. Я могу сделать это только для каждого столбца (таким образом, для трех цветовых полос), но мне нужна общая цветовая шкала для первых двух столбцов.

Вот мой пример кода:

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

person jjv    schedule 23.09.2017    source источник


Ответы (1)


Аргумент 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)

введите описание изображения здесь

person ImportanceOfBeingErnest    schedule 23.09.2017
comment
Привет, не могли бы вы объяснить спецификацию столбцов? скажем, у меня есть графики 4 x 3, и я хочу, чтобы первый столбец был ниже первых двух столбцов, а второй - под последним столбцом, как это сделать? - person user11036847; 21.12.2019