在python中使用加权元素制作六边形绘图

在python中使用加权元素制作六边形绘图,python,matplotlib,plot,hexagonal-tiles,Python,Matplotlib,Plot,Hexagonal Tiles,使用python中的matplotib,可以通过提供要绘制的项目列表和权重列表来制作一个简单的柱状图,这样每个项目对其所属bin的贡献就可以根据其权重进行调整,例如 import matplotlib.pyplot as plt ... plt.hist(items, weights = weightsOfItems) 我试图绘制两个值相对的六边形箱柱状图,可以使用 plt.hexbin(xValues, yValues) 如前所述,我希望根据权重列表调整每对数据对所属bin的贡献。从这

使用python中的matplotib,可以通过提供要绘制的项目列表和权重列表来制作一个简单的柱状图,这样每个项目对其所属bin的贡献就可以根据其权重进行调整,例如

import matplotlib.pyplot as plt

...

plt.hist(items, weights = weightsOfItems)
我试图绘制两个值相对的六边形箱柱状图,可以使用

plt.hexbin(xValues, yValues)
如前所述,我希望根据权重列表调整每对数据对所属bin的贡献。从这个角度来看,我应该能够通过输入参数C来实现这一点,即

plt.hexbin(xValues, yValues, C = weightsOfValues)
然而,这样做会产生完全错误的图。目前,我首先根据权重对xvalue和yvalue进行采样,以得到xSamples和ysample。然而,这个过程非常耗时,也意味着我没有使用所有可用的数据,因为我去掉了样本中没有包含的xvalue和yvalue

那么,是否有人知道一种生成六边形箱直方图的方法,其中根据给定的权重调整值对各自箱的贡献?

根据:

如果指定了
C
,则指定坐标处的值(
x[i]
y[i]
)。这些值为每个六边形箱累积,然后根据默认为numpy平均值函数(
np.mean
)的
reduce\u C\u函数减少。(如果指定了
C
,则它也必须是长度与
x
y
相同的一维序列)

这意味着对于每个箱子,存储相应的
C
值,然后对其应用
reduce\u C\u功能。由于默认函数为
np.mean
,因此结果不是您想要获得的结果,而是平均值,而不是总和。要实际获得所有权重之和,应将其更改为
np.sum
,以便对箱子中每个
(x,y)
C
值求和,而不是求平均值

此示例显示了与简单数据的区别:

N = 10**5
x = np.random.normal(size=N)
y = np.random.normal(size=N)
plt.figure(figsize=(12,4)); plt.subplot(131)
plt.hexbin(x,y); plt.colorbar()
plt.subplot(132)
plt.hexbin(x,y,C=np.ones(N)); plt.colorbar()
plt.subplot(133)
plt.hexbin(x,y,C=np.ones(N),reduce_C_function=np.sum)
plt.colorbar(); plt.tight_layout()
现在,所有值(由高斯分布生成)的权重都设置为1,因此加权直方图的适当算法应返回与未加权直方图相同的结果。输出为以下曲线图:

左侧面板为未加权图,显示二维高斯分布,中间面板为默认行为
C
,平均每个料仓的所有
C
值,因此,所有料仓中的计数为1,右侧面板为行为
np.sum
,检索二维高斯分布