如何在hist2d(matplotlib)中设置箱子内容

1 投票
2 回答
2357 浏览
提问于 2025-04-18 09:08

我想把一些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')

撰写回答