web-dev-qa-db-ja.com

各サブプロットのmatplotlibカラーバー

2x2プロットの各サブプロットに個別のカラーバーを追加したいと思います。

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
plt.colorbar(z1_plot,cax=ax1)
z2_plot = ax2.scatter(x,y,c = z2,vmin=0.0,vmax=40)
plt.colorbar(z1_plot,cax=ax2)
z3_plot = ax3.scatter(x,y,c = z3,vmin=0.0,vmax=894)
plt.colorbar(z1_plot,cax=ax3)
z4_plot = ax4.scatter(x,y,c = z4,vmin=0.0,vmax=234324)
plt.colorbar(z1_plot,cax=ax4)
plt.show()

これがあなたのやり方だと思いましたが、結果のプロットは本当に混乱しています。背景がすべて灰色で、私が持っているset_xlim、set_ylimコマンドを無視します(簡単にするためにここには示していません)。 +カラーバーは表示されません。これは正しい方法ですか?

また、「cax = ...」を削除しようとしましたが、カラーバーはすべて右下のプロットに表示され、個別のプロットには表示されません!

24
Cokes

これをご覧ください matplotlibサンプルページ 。ここでは、各サブプロットに4つの個別のカラーバーを持つ次のプロットを取得する方法が示されています。 enter image description here

これがお役に立てば幸いです。
さらに詳しく見ることができます こちら で、matplotlibでできることの多くを見つけることができます。

13
user3413108

これはユーティリティmake_axes_locatableで簡単に解決できます。これがどのように機能し、容易に適応できるかを示す最小限の例を提供します。

bar to each image

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

import numpy as np

m1 = np.random.Rand(3, 3)
m2 = np.arange(0, 3*3, 1).reshape((3, 3))

fig = plt.figure(figsize=(16, 12))
ax1 = fig.add_subplot(121)
im1 = ax1.imshow(m1, interpolation='None')

divider = make_axes_locatable(ax1)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im1, cax=cax, orientation='vertical')

ax2 = fig.add_subplot(122)
im2 = ax2.imshow(m2, interpolation='None')

divider = make_axes_locatable(ax2)
cax = divider.append_axes('right', size='5%', pad=0.05)
fig.colorbar(im2, cax=cax, orientation='vertical');
17
Ramon Martinez

plt.colorbar(z1_plot,cax=ax1)では、_ax=_の代わりに_cax=_を使用します。つまり、plt.colorbar(z1_plot,ax=ax1)

13
jayesef

ax引数を matplotlib.pyplot.colorbar() に指定します。

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(2,2)
for i in range(2) :
    for j in range(2) :
         data = np.array([[i,j],[i+0.5,j+0.5]])
         im = ax[i,j].imshow(data)
         plt.colorbar(im,ax=ax[i,j])

plt.show()

enter image description here

1
Patrick Sanan