将共享轴图添加到 matplotlib 中的 AxesGrid 图中
我想在 matplotlib 中创建 2x3 的 2d 直方图图,并在每个子图的顶部使用共享颜色条和 1d 直方图。 AxesGrid 为我提供了除最后一部分之外的所有内容。我尝试按照 "scatter_hist.py" 示例。代码看起来像这样:
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 方法轻松地将直方图添加到顶部,或者我需要使用不同的方法吗?谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该在调用
divider.append_axes< 时为
sharex
关键字提供一个AxesSubplot
实例(具有_adjustable
属性) /代码>。相反,您将hexbin
的返回值赋予此关键字参数,它是LocatablePolyCollection
的实例。因此,如果您在调用
divider.append_axes
时将sharex=plots[i]
替换为sharex=grid[i]
,您的代码应该可以正常工作。You should give an instance of
AxesSubplot
(which has an_adjustable
attribute) to thesharex
keyword in your call ofdivider.append_axes
. Instead of this you are giving the return value ofhexbin
to this keyword argument, which is an instance of aLocatablePolyCollection
.So your code should work if you replace
sharex=plots[i]
withsharex=grid[i]
in your call ofdivider.append_axes
.