1

我正在使用 pyplot.hist2d 绘制由第三个变量 z 加权的二维直方图(x vs.y)。我不想像 hist2d 那样对给定像素 [x_i,y_i] 中的 z 值求和,而是想获得落在该像素中的所有数据点的平均 z。

有没有这样做的python脚本?

谢谢。

4

1 回答 1

2

Numpyhistogram2d()可以将两个计数(标准直方图)计算为总和(通过weights参数)。将两者相除得到平均值。

下面的示例显示了 3 个直方图和一个颜色条。选择的样本数量相对较少,以演示计数为零的单元格会发生什么(除法给出NaN,因此单元格留空)。

import numpy as np
import matplotlib.pyplot as plt

N = 1000
x = np.random.uniform(0, 10, N)
y = np.random.uniform(0, 10, N)
z = np.cos(x) * np.sin(y)

counts, xbins, ybins = np.histogram2d(x, y, bins=(30, 20))
sums, _, _ = np.histogram2d(x, y, weights=z, bins=(xbins, ybins))

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(15, 4))
m1 = ax1.pcolormesh(ybins, xbins, counts, cmap='coolwarm')
plt.colorbar(m1, ax=ax1)
ax1.set_title('counts')
m2 = ax2.pcolormesh(ybins, xbins, sums, cmap='coolwarm')
plt.colorbar(m2, ax=ax2)
ax2.set_title('sums')
with np.errstate(divide='ignore', invalid='ignore'):  # suppress possible divide-by-zero warnings
    m3 = ax3.pcolormesh(ybins, xbins, sums / counts, cmap='coolwarm')
plt.colorbar(m3, ax=ax3)
ax3.set_title('mean values')
plt.tight_layout()
plt.show()

示例图

于 2020-11-10T12:11:48.097 回答