web-dev-qa-db-ja.com

サブプロットの海のヒートマップの1つのカラーバー

以下は、各サブプロットのカラーバーを示す例です。

_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

各サブプロットのカラーバーを削除するにはどうすればよいですか?縦向きまたは横向きのカラーバーが1つだけ欲しいのですが。 fig.get_axes()[:-4]を使用して各カラーバーの軸にアクセスできることはわかっていますが、プロットから完全に削除するにはどうすればよいですか?ヒートマップが呼び出されたときにカラーバーの描画をオプトアウトするオプションはないと思います。

23
pbreach

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を呼び出すこともできます。プロットしますが、それほどタイトではありません)。

43
mwaskom