私は今、1つのカラーバーを共有するために3つの垂直に積まれたpcolormeshプロットを取得しようとしています。さまざまなGoogle検索がmatplotlibツールキットのImageGrid機能に私を導いてくれました。私は好きになり始めています(私はそれをよく理解していませんが)。matplotlib_toolkits上の軸のサイズ変更ImageGrid
subplot2gridのcolspan引数のように、Axesオブジェクトを複数の列にまたがって「ストレッチ」する機能がありません。デモコードfound hereで遊んで、私はこのイメージを作り出すことができるという点に着きます。
現在、図形の中央に配置されています。両端の空白は、中心軸の幅と同じ幅になります。単純に、これらの3つのプロットのそれぞれを、プロットの右側とこの高さにカラーバーを維持しながら、スペースの幅に伸ばしてください。
これまでのところ、(実際にビットが不足していると、単にサンプル・コードである)私が試みたコード。どんな助けでも大歓迎です!
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import numpy as np
def get_demo_image():
from matplotlib.cbook import get_sample_data
f = get_sample_data("axes_grid/bivariate_normal.npy", asfileobj=False)
z = np.load(f)
# z is a numpy array of 15x15
return z, (-3, 4, -4, 3)
if 1:
F = plt.figure(1, (6, 6))
F.clf()
# prepare images
Z, extent = get_demo_image()
ZS = [Z[i::3, :] for i in range(3)]
extent = extent[0], extent[1]/3., extent[2], extent[3]
# demo 2 : shared colorbar
grid2 = ImageGrid(F, 111,
nrows_ncols=(3, 1),
direction="column",
axes_pad=0,
add_all=True,
label_mode="1",
share_all=False,
cbar_location="right",
cbar_mode="single",
cbar_size="10%",
cbar_pad=0.05,
)
grid2[0].set_xlabel("X")
grid2[0].set_ylabel("Y")
vmax, vmin = np.max(ZS), np.min(ZS)
import matplotlib.colors
norm = matplotlib.colors.Normalize(vmax=vmax, vmin=vmin)
for ax, z in zip(grid2, ZS):
im = ax.imshow(z, norm=norm,
origin="lower", extent=extent,
interpolation="nearest")
# With cbar_mode="single", cax attribute of all axes are identical.
ax.cax.colorbar(im)
ax.cax.toggle_label(True)
grid2[0].set_xticks([-2, 0])
grid2[0].set_yticks([-2, 0, 2])
plt.draw()
plt.show()
あなたは 'imshow'sの' aspect'を変更してみてください可能性があります。たとえば、「aspect = 0.5」に設定すると、図が水平方向に伸びるはずです。デフォルトでは、これは1に設定されます。つまり、x軸の距離はy軸の等価距離と等しくなります。 – tom