web-dev-qa-db-ja.com

別のサブプロットで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

左側のプロットなしでカラーバーのみを印刷するにはどうすればよいですか?

ありがとう

11
gc5

colorbar()は、カラーバーが描画されるcaxオブジェクトを指定できるaxesキーワード引数を受け入れます。

あなたの場合、カラーバーの呼び出しを次のように変更します。

# 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_ratioswidth_ratiosを好みに合わせて変更できます。

18
tbekolay

caxの代わりにaxを使用する必要があると思います。

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