2011-07-04 14 views
4

matplotlibに2dヒストグラムの2x3プロットを作成し、各サブプロットの上部に共有カラーバーと1dヒストグラムを作成したいとします。 AxesGridは私に最後の部分を除いてすべてを得ました。上記のページの"scatter_hist.py" exampleに続いてmake_axes_locatableを使用して、各サブプロットの上部に2dヒストグラムを追加しようとしました。matplotlibのAxesGridプロットに共有軸プロットを追加

plots = [] 
hists = [] 
for i, s in enumerate(sim): 
    x = np.log10(s.g['temp']) #just accessing my data 
    y = s.g['vr'] 
    histy = s.g['mdot'] 
    rmin, rmax = min(s.g['r']), max(s.g['r']) 
    plots.append(grid[i].hexbin(x, y, C = s.g['mass'], 
       reduce_C_function=np.sum, gridsize=(50, 50), 
       extent=(xmin, xmax, ymin, ymax), 
       bins='log', vmin=cbmin, vmax=cbmax)) 
    grid[i].text(0.95 * xmax, 0.95 * ymax, 
       '%2d-%2d kpc' % (round(rmin), round(rmax)), 
       verticalalignment='top', 
       horizontalalignment='right') 

    divider = make_axes_locatable(grid[i]) 
    hists.append(divider.append_axes("top", 1.2, pad=0.1, sharex=plots[i])) 
    plt.setp(hists[i].get_xticklabels(), visible=False) 
    hists[i].set_xlim(xmin, xmax) 
    hists[i].hist(x, bins=50, weights=histy, log=True) 

#add color bar 
cb = grid.cbar_axes[0].colorbar(plots[i]) 
cb.set_label_text(r'Mass ($M_{\odot}$)') 

これはdivider.append_axes()関数呼び出しでエラーが発生します:

AttributeError: 'LocatablePolyCollection' object has no attribute '_adjustable' 

それは簡単にトップにヒストグラムを追加することが可能かどう誰もが知っていたコードは次のようになりますaxesgridのアプローチ、または別のアプローチを使用する必要がありますか?ありがとう!

+0

あなたはまだこれを処理しようとしていますか?あなたは解決策を見つけましたか? – Yann

答えて

1

あなたはdivider.append_axesの通話にsharexキーワードに(_adjustable属性を持つ)AxesSubplotのインスタンスを与える必要があります。この代わりにhexbinという戻り値をこのキーワード引数に指定します。これはLocatablePolyCollectionのインスタンスです。

divider.append_axesの電話でsharex=plots[i]sharex=grid[i]に置き換えると、コードが機能するはずです。

関連する問題