hexbin和histogram2d的不同行为

时间:2014-04-10 13:58:12

标签: python matplotlib

hexbin和histogram2d有什么区别?

f, (ax1,ax2) = plt.subplots(2)
ax1.hexbin(vradsel[0], distsel[0],gridsize=20,extent=-200,200,4,20],cmap=plt.cm.binary)
H, xedges, yedges =np.histogram2d(vradsel[0], distsel[0],bins=20,range=[[-200,200],[4,20]])
ax2.imshow(H, interpolation='nearest', cmap=plt.cm.binary, aspect='auto',extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]])
plt.show()

你可以看到histogram2d给出了-90度的旋转。我知道数据应该像hexbin图。

Difference hexbin/histogram2d

1 个答案:

答案 0 :(得分:3)

差异不在于计算直方图的方式,而在于您绘制直方图的方式。来自H的数组np.histogram从数组左上角的4, -200 bin开始,但会根据您的默认值origin进行绘制。您可以使用origin=lower中的origin=upperplt.imshow个关键字对此进行控制。

但是origin只是镜像图像,所以另外你必须记住,在图像中,水平轴x首先出现,垂直轴y排在第二位,与数组相反,所以你必须在绘图前转置H

我的建议只是使用plt.hist2d()代替plt.hexbin,这将适当调整范围和方向,与H, x, y, im = ax.hist2d(...)一样。您仍然可以像numpy版本一样访问结果:a = np.random.rand(100)*400 - 200 b = np.random.rand(100)*16 + 4 a[:10] = -200 b[:10] = 4 f, ax = plt.subplots(3) ax[0].hexbin(a, b, gridsize=20, extent=[-200,200,4,20], cmap=plt.cm.binary) H, xedges, yedges = np.histogram2d(a, b, bins=20, range=[[-200,200],[4,20]]) ax[1].imshow(H.T, interpolation='nearest', cmap=plt.cm.binary, aspect='auto', extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]], origin='lower') # simplest and most reliable: ax[2].hist2d(a, b, bins=20, range=[[-200,200],[4,20]], cmap=plt.cm.binary) 但它会自动生成图表


{{1}}

hists