我正在使用pyplot.hist2d绘制一个二维直方图 (x vs.y),根据第三个变量z进行加权。与hist2d所做的在给定像素[x_i,y_i]中求和z值不同,我想获得落入该像素中的所有数据点的平均z值。
是否有一个Python脚本可以实现这一点?
谢谢。
是否有一个Python脚本可以实现这一点?
谢谢。
histogram2d()
函数可以计算计数(标准直方图)和总和(通过weights
参数)。将二者相除即可得到平均值。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()