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

Вот пример, который показывает панель цветов для каждого подзаголовка:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.random((10,10,)))

fig,axn = plt.subplots(2, 2, sharex=True, sharey=True)

for ax in axn.flat:
    sns.heatmap(df, ax=ax)

enter image description here

Как удалить цветные панели для каждого подзаголовка? Я хотел бы иметь только один цветной бар, который либо вертикально, либо горизонтально ориентирован. Я знаю, что у меня есть доступ к каждой оси colorbar через fig.get_axes()[:-4], но как я могу удалить его из них целиком из графика? Я не думаю, что есть возможность отказаться от рисования colorbar при вызове heatmap.

Ответ 1

Параметр cbar определяет, следует ли добавить цветную панель, а параметр cbar_ax может дополнительно указать оси, в которые должна идти цветовая панель. Итак, вы можете сделать:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.random((10,10,)))

fig, axn = plt.subplots(2, 2, sharex=True, sharey=True)
cbar_ax = fig.add_axes([.91, .3, .03, .4])

for i, ax in enumerate(axn.flat):
    sns.heatmap(df, ax=ax,
                cbar=i == 0,
                vmin=0, vmax=1,
                cbar_ax=None if i else cbar_ax)

fig.tight_layout(rect=[0, 0, .9, 1])

(Здесь вы получите предупреждение о tight_layout, но это действительно правильно, потому что мы явно разместили cbar_ax. Если вам не нравится видеть предупреждение, вы можете также вызвать tight_layout перед графикой, но это будет не так сильно).