有没有办法在 Python 中合并一组 2D 坐标

问题描述

嘿,我有一个 x,y coordinates 形式的二维数组:[[x0,y0],[x1,y1],....,[xn,yn]]。这些坐标位于大小为 x_lengthy_length 的矩形内。我想将矩形分成一组正方形,并找出每个正方形内有多少个坐标,如果这有意义的话。使用 2D 直方图函数 (np.histogram2d()) 我设法做了类似的事情,但它没有告诉我每个 bin 内的实际点数(这是我想要得到的)。我附上了一个二维直方图的例子以供参考。 enter image description here

enter image description here

解决方法

values,xbins,ybins = np.histogram2d(x=a[:,0],y=a[:,1]) 将每个 bin 的实际点数转化为值。请注意,许多 matplotlib 函数首先按 y 索引,因此您可能需要 values.T,具体取决于用例。

这是一个显示如何使用这些值的可视化。

import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
import numpy as np

x = np.linspace(-0.212,0.233,50)
y = x * 0.5 - 0.01

hist,ybins = np.histogram2d(x=x,y=y,bins=(np.arange(-0.25,0.25001,0.02),np.arange(-0.15,0.15001,0.02)))

fig,ax = plt.subplots(figsize=(11,6))
for i in range(len(xbins) - 1):
    for j in range(len(ybins) - 1):
        text = ax.text((xbins[i] + xbins[i + 1]) / 2,(ybins[j] + ybins[j + 1]) / 2,f"{hist[i,j]:.0f}",color='cornflowerblue',size=16,ha='center',va='center')
        text.set_path_effects([path_effects.Stroke(linewidth=3,foreground='white',alpha=0.6),path_effects.Normal()])
ax.plot(x,y,'-ro')
ax.set_xlim(xbins.min(),xbins.max())
ax.set_ylim(ybins.min(),ybins.max())
ax.set_xticks(xbins + 0.0001,minor=True)
ax.set_yticks(ybins + 0.0001,minor=True)
ax.grid(which='minor',color='dodgerblue',ls='--')
ax.set_aspect(1)
plt.show()

visualizing np.histogram2d