gpt4 book ai didi

python - 如何使用或操作 hist2d 的输出(返回值)并创建新的直方图

转载 作者:行者123 更新时间:2023-12-01 00:08:27 25 4
gpt4 key购买 nike

我正在尝试解决如何使用 hist2d 的返回值。我看到它返回一个二维数组(“直方图对象”)以及 bin 边缘和图像。我想做的是创建两个直方图(一些物理数据),对它们进行标准化,减去它们(即减去 bin 值),然后对剩下的内容进行直方图绘制。

可以从这个开始:

h1 = plt.hist2d(x1, y1,bins=(100,100),normed=True)
h2 = plt.hist2d(x2, y2,bins=(100,100),normed=True)

h1 和 h2 的长度实际上是 4,其中 h1[0] 是带有 bin 值的二维数组。我不清楚 h1 1 到底是什么,h1 2和 h1[3] 是,但减去它们会产生 0 的数组。但是,我可以减去 h1[0] 和 h2[0] 并得到看起来有意义的 bin 值:

h1 = plt.hist2d(x1, y1,bins=(100,100),normed=True)
h2 = plt.hist2d(x2, y2,bins=(100,100),normed=True)
H = h1[0] - h2[0]

现在的问题是,如何制作这些新值的直方图?我可以重写 h1[0],但即便如此,如何以相同的格式重新绘制 hist2d 而不使用不同类型的函数?人们可以使用 histogram2d 做类似的事情,也许还可以使用网格,但结果很难看:

h1, xedges, yedges = np.histogram2d(x1, y1,bins=(100,100),normed=True)
h2, xedges, yedges = np.histogram2d(x2, y2,bins=(100,100),normed=True)
H = h1 - h2
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(121, title='imshow: square bins')
plt.imshow(H, interpolation='nearest', origin='low',extent=[xedges[0], xedges[-1], yedges[0], yedges[-1]])
ax = fig.add_subplot(122, title='pcolormesh: actual edges')
X, Y = np.meshgrid(xedges, yedges)
ax.pcolormesh(X, Y, H)
plt.show()

Subtracted histograms

正如一位评论者指出的那样,这些图倾斜是有道理的,因为它们现在是 (100,100) 个 bin,而不是原始轴,原始轴是 (0,1000)、(-100,100)。这个问题可以修复:

plt.imshow(H, interpolation='nearest', origin='low')

但是,输出会发生奇怪的旋转。我可以看出,因为模糊的模糊条应该是垂直的:

unsquished output

最佳答案

两个问题。

  1. 您需要对两个直方图使用相同的分箱,否则它们无法相减。
  2. 您无法减去密度,除非您确保它们引用相同的点数和相同的数据范围。因为不太可能有相同数量的点,所以请计算绝对频率,如果它们位于同一个容器中,则可以轻松减去绝对频率。

因此它需要

h1, xedges, yedges = np.histogram2d(x1, y1, bins=(100,100),normed=False)
h2, _, __ = np.histogram2d(x2, y2, bins=(xedges, yedges), normed=False)
H = h1 - h2

绘图时注意np.histogram2d的输出数组needs to be transposed绘图之前;即 plt.imshow(H.T, ...)plt.pcolormesh(X, Y, H.T, ...)

关于python - 如何使用或操作 hist2d 的输出(返回值)并创建新的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59795238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com