如何在hist2d(matplotlib)中设置箱子内容
我想把一些z值按照(x,y)的坐标分组来画图。这看起来像是用matplotlib画的二维直方图(hist2d),不过这里的每个分组的内容是由另一个数组来定义,而不是表示数量。请问有没有办法在hist2d中设置这些分组的内容呢?
2 个回答
-4
你想要设置每个箱子里的元素数量吗?我觉得这更像是条形图,而不是直方图。所以直接用 ax.bar
就可以了。
补充说明 tcaswell 提出了一个好观点,对于多维图像,应该用 imshow
而不是 bar
。
2
不,hist2d没有办法直接设置每个箱子的内容,但有两个其他的选择。
1) 你可以使用bar3d手动定义每个箱子的边界,不过效果有时候不太好。
hist,xbinedges,ybinedges = np.histogram2d(x,y,bins=bins,range=range)
BinlowEdgex, BinlowEdgey = np.meshgrid(xbinedges[:-1], ybinedges[:-1])
xbinwidth = ((range[0][1]-range[0][0])/(bins[0]))
ybinwidth = ((range[1][1]-range[1][0])/(bins[1]))
ax.bar3d(BinlowEdgex.flatten(), BinlowEdgey.flatten(), np.zeros(bins[0]*bins[1]), xbinwidth*np.ones(bins[0]*bins[1]), ybinwidth*np.ones(bins[0]*bins[1]), zvalues.flatten())
2) 你可以放弃使用3D直方图的想法,改用颜色来表示z值。
ax.imshow(zvalues.T,extent=np.array(range).flatten(),origin='lower',interpolation = 'nearest')