在hist2d中的每个bin中打印值(matplotlib)

时间:2017-04-21 09:13:34

标签: python matplotlib histogram

我想创建一个2d直方图,其中在每个bin中,该bin表示的值显示在该给定bin的中心。例如,大小为5x5的hist2d在最终图表中将包含25个值。这对PyROOT很有用,但我需要在这里使用matplotlib / pyplot。

根据第一个答案尝试了以下内容:

fig, ax = plt.subplots()
ax.set_aspect("equal")
hist, xbins, ybins, im = ax.hist2d(x, y, bins=(4, [1,2,3,5,10,20]))
ax.text(xbins[1]+0.5,ybins[1]+0.5, "HA", color="w", ha="center", va="center", fontweight="bold")

img = StringIO.StringIO()
plt.savefig(img, format='svg')
img.seek(0)
print("%html <div style='width:500px'>" + img.getvalue() + "</div>")

没有任何错误消息,但&#34; HA&#34;根本没有显示在第一个垃圾箱里。我在Zeppelin中编程,因此我需要从缓冲区中获取img ...

1 个答案:

答案 0 :(得分:1)

要注释hist2d图,就像任何其他图一样,您可以使用matplotlib的text方法。要注释的值由返回的直方图给出。注释的位置由直方图边缘(加上二进制宽度的一半)给出。然后,您可以遍历所有垃圾箱并在每个垃圾箱中放置文本。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.random.poisson(size=(160))
y = np.random.poisson(size=(160))

fig, ax = plt.subplots()
ax.set_aspect("equal")
hist, xbins, ybins, im = ax.hist2d(x,y, bins=range(6))

for i in range(len(ybins)-1):
    for j in range(len(xbins)-1):
        ax.text(xbins[j]+0.5,ybins[i]+0.5, hist[i,j], 
                color="w", ha="center", va="center", fontweight="bold")

plt.show()

enter image description here

如果只需要一个注释,例如以下

ax.text(xbins[1]+0.5,ybins[1]+0.5, "HA", 
        color="w", ha="center", va="center", fontweight="bold")

将产生

enter image description here