我想在matplotlib中创建一个2x3的2d直方图,其中共享颜色条和每个子图顶部的1d直方图。 AxesGrid除了最后一部分外,我得到了一切。我尝试使用make_axes_locatable
按照上一页上的"scatter_hist.py" example在每个子图的顶部添加一个二维直方图。代码看起来像这样:
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 :(得分:1)
您应该在调用AxesSubplot
时向_adjustable
关键字提供sharex
(具有divider.append_axes
属性)的实例。而不是这样,您将hexbin
的返回值赋予此关键字参数,该参数是LocatablePolyCollection
的实例。
因此,如果在sharex=plots[i]
的调用中将sharex=grid[i]
替换为divider.append_axes
,则代码应该有效。