Python 使用MatPlotLib生成彩色权重贴图?

Python 使用MatPlotLib生成彩色权重贴图?,python,matplotlib,Python,Matplotlib,我有一张地图,我希望在上面覆盖一张颜色权重地图。重量图有m x n1m x 1m框。我有很多分数,每个分数都有分量。长方体的重量是通过将落在该长方体中的所有点的重量相加来计算的 现在,根据他们的重量,每个盒子都有一定的颜色 期望的结果与类似,但是 在我的例子中,地图和重量地图必须很好地重叠 应该使用已计算的权重来指定颜色,而不是频率 如果我理解正确,我该怎么做呢?您有一组点,每个点都有一个x坐标、一个y坐标和一个与其相关的权重 你链接的问题中的答案已经非常准确地描述了你想要做什么。唯一的区别是,

我有一张地图,我希望在上面覆盖一张颜色权重地图。重量图有
m x n
1m x 1m
框。我有很多分数,每个分数都有分量。长方体的重量是通过将落在该长方体中的所有点的重量相加来计算的

现在,根据他们的重量,每个盒子都有一定的颜色

期望的结果与类似,但是

  • 在我的例子中,地图和重量地图必须很好地重叠
  • 应该使用已计算的权重来指定颜色,而不是频率

  • 如果我理解正确,我该怎么做呢?

    您有一组点,每个点都有一个x坐标、一个y坐标和一个与其相关的权重

    你链接的问题中的答案已经非常准确地描述了你想要做什么。唯一的区别是,您可以使用
    weights=
    参数来获取每个箱子中的加权计数

    例如,您可以使用

    wcounts, xedges, yedges = np.histogram2d(x, y, weights=w)
    
    要获得加权直方图,请执行以下操作

    extent = xedges[0], xedges[-1], yedges[0], yedges[-1]
    imshow(wcounts, extent=extent, alpha=0.5)
    
    来展示它

    我不知道你把它叠加在“地图”上是什么意思,但你可以使用
    alpha=
    参数
    imshow()
    使图像半透明(或者你可以在图像顶部绘制“地图”)

    同样,你也可以这样做

    hexbin(x, y, C=w, alpha=0.5)
    
    要绘制加权六边形装箱图,在本例中,使用
    C=
    参数指定权重,然后再次使用
    alpha=
    控制绘图的透明度

    编辑 好的,那么你想计算一个指定的箱子位置网格上的柱状图。假设你的x坐标在0米到100米之间,y坐标在0米到75米之间,你希望每个箱子是1米乘1米。您可以将一组数组传递给
    np.historogram2d()
    ,这些数组指定x和y中的bin边:


    现在,
    wcounts
    是一个
    (100,75)
    数组,每个元素代表一个1米乘1米的箱子中的加权计数。

    或者你可以在图像顶部绘制你的“地图”

    伟大的建议和救生贴子!我唯一关心的是直方图和地图之间的比例差异。请看,地图以米为单位,跨度约为200m^2。那么直方图的比例呢。我真的很困惑。直方图的每个单元格都应该对应于地图上的1m*1m正方形。您可以通过明确指定
    np.historogram2d()
    的bin边来实现这一点。查看我的编辑。非常感谢您的更新。在我的例子中,另一个非常根本的区别是,我希望落在同一个正方形中的点的权重可以求和。i、 例如,因为我的平方是1m*1m,所以点(0.75,0.5)和(0.4,0.1)应该落在同一个单元格中,它们的权重相加形成单元格的权重。您的更新是否会自动执行此操作?谢谢!是-从字面上看,您的案例与您链接的问题之间的唯一区别在于,每个箱子中的值是该箱子中各点权重的总和,而不仅仅是该箱子中的点数。试试看,自己检查一下!“我的x值和y值互换”-这是因为
    imshow()
    将数组的第一个维度视为行,即y值。只需转置
    wcounts
    。“我注意到savefig(PROJECT_PATH+'\\data\\filename.svg')”-这可能不是有效的文件路径。尝试将其保存在当前工作目录中。
    # remember that for n bins there are n+1 bin edges
    x_edges = np.linspace(0, 100, 101)
    y_edges = np.linspace(0, 75, 76)
    
    wcounts = np.histogram2d(x, y, weights=w, bins=(x_edges, y_edges))[0]