Как построить цветную панель pcolor в другом подзаголовке - matplotlib

Я пытаюсь разделить свои сюжеты в разных подзаголовках. То, что я хочу достичь, - это поставить цветную панель для подзаголовка в другом подзаголовке. Сейчас я использую:

# first graph
axes = plt.subplot2grid((4, 2), (0, 0), rowspan=3)
pc = plt.pcolor(df1, cmap='jet')

# second graph
axes = plt.subplot2grid((4, 2), (3, 0))
plt.pcolor(df2, cmap='Greys')

# colorbar
plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc) 

Но результат следующий (обратите внимание, что нежелательный пустой граф оставлен на цветной панели): Wrong graph

Что я могу сделать, чтобы напечатать только цветную панель без левого сюжета?

Спасибо

Ответ 1

colorbar() принимает аргумент ключевого слова cax, который позволяет указать объект axes, на который будет нарисована цветная панель.

В вашем случае вы изменили бы вызов colorbar на следующее:

# colorbar
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc, cax=axes)

Это займет все пространство, указанное subplot2grid; вы можете настроить это, чтобы быть более разумным либо путем того, чтобы основные оси занимали больше столбцов, чем оси цветной панели, или устанавливая явно gridspec. Например, ваша цифра может быть проще для настройки со следующим:

from matplotlib import gridspec
gs = gridspec.GridSpec(2, 2, height_ratios=(3, 1), width_ratios=(9, 1))

# first graph
axes = plt.subplot(gs[0,0])
pc = plt.pcolor(df1, cmap='jet')

# second graph
axes = plt.subplot(gs[1,0])
plt.pcolor(df2, cmap='Greys')

# colorbar
axes = plt.subplot(gs[0,1])
plt.colorbar(pc, cax=axes)

Затем вы можете просто изменить height_ratios и width_ratios по своему усмотрению.

Ответ 2

Я считаю, что вместо cax следует использовать ax.

# colorbar
axes = plt.subplot2grid((4, 2), (0, 1), rowspan=3)
plt.colorbar(pc, ax=axes)