我想创建一个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 ...
答案 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()
如果只需要一个注释,例如以下
ax.text(xbins[1]+0.5,ybins[1]+0.5, "HA",
color="w", ha="center", va="center", fontweight="bold")
将产生