有没有办法在 Python 中装箱一组二维坐标
Is there a way to bin a set of 2D coordinates in Python
嘿,我有一个 x,y coordinates
的二维数组,形式为:[[x0,y0],[x1,y1],....,[xn,yn]]
。这些坐标位于 x_length
和 y_length
大小的矩形内。我想将矩形分成一组正方形,并找出每个正方形内有多少个坐标,如果这有意义的话。使用 2D 直方图函数 (np.histogram2d()
) 我设法做了类似的事情,但它没有告诉我每个 bin 中的实际点数(这是我想要得到的)。我附上了二维直方图的示例以供参考。
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, xbins, 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()
嘿,我有一个 x,y coordinates
的二维数组,形式为:[[x0,y0],[x1,y1],....,[xn,yn]]
。这些坐标位于 x_length
和 y_length
大小的矩形内。我想将矩形分成一组正方形,并找出每个正方形内有多少个坐标,如果这有意义的话。使用 2D 直方图函数 (np.histogram2d()
) 我设法做了类似的事情,但它没有告诉我每个 bin 中的实际点数(这是我想要得到的)。我附上了二维直方图的示例以供参考。
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, xbins, 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()