3

このコードから始めます:

import numpy as np
import matplotlib.pyplot as pl
import matplotlib 
from matplotlib.gridspec import GridSpec 

x=np.linspace(0.0,1.0,100)
y=np.linspace(0.0,1.0,100)
xv,yv=np.meshgrid(x,y)

gs = GridSpec(2, 2,hspace=0.00,wspace=0.1,width_ratios=[25,1])
ax1 = pl.subplot(gs[0,0])
im=ax1.imshow(xv.T, origin='lower', cmap=matplotlib.cm.jet,extent=(0,100,0,1.0),aspect='auto')  
xax1=ax1.get_xaxis()
xax1.set_ticks([])
ax3 = pl.subplot(gs[0,1])
#cbar=pl.colorbar(im,cax=ax3,shrink=0.5)
cbar=pl.colorbar(im,cax=ax3)
ax2 = pl.subplot(gs[1,0])
ax2.plot(np.sin(x))
pl.savefig('test.pdf')

同じ x 軸を共有する 2 つのプロットを維持したいのですが、カラーバーも縮小したいと思います。コメント行を使用すると機能しません。それを行うためのより良い、最もエレガントな方法は何ですか? いつか使えばいいのにと思うのですmake_axes_locatableが、imshowのx軸の長さを変えずに正しい使い方がわかりません。

ありがとうございました。

4

1 に答える 1

3

inset_axes を使用して、配置に関する多くの制御を行うことができます。

import numpy as np
import matplotlib.pyplot as pl
import matplotlib 
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

x=np.linspace(0.0,1.0,100)
y=np.linspace(0.0,1.0,100)
xv,yv=np.meshgrid(x,y)

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex = ax1)
im  = ax1.imshow(xv.T, origin='lower', 
          cmap=matplotlib.cm.jet,extent=(0,100,0,1.0),aspect='auto')
ax2.plot(np.sin(x))
cax = inset_axes(ax1,
                 width="5%",
                 height="70%",
                 bbox_transform=ax1.transAxes,
                 bbox_to_anchor=(0.025, 0.1, 1.05, 0.95),
                 loc= 1)
norm          = mpl.colors.Normalize(vmin=xv.min(), vmax=xv.max())
cb1           = mpl.colorbar.ColorbarBase(cax, 
                    cmap=matplotlib.cm.jet, norm=norm, 
                    orientation='vertical')
cb1.set_label(u'some cbar')

これが私が得たものです。それはあなたの質問に役立ちますか?

x 軸と個別のカラー バーを共有する 2 つのサブプロットを含む図。

于 2013-09-30T21:52:54.507 に答える