首页 > 解决方案 > 有没有办法在 Python 中对一组 2D 坐标进行 bin 处理

问题描述

嘿,所以我有一个二维数组,x,y coordinates格式为:[[x0,y0],[x1,y1],....,[xn,yn]]。这些坐标位于一个大小为x_length和的矩形内y_length。我想将矩形分割成一组正方形,并找出每个正方形中有多少个坐标,如果这有任何意义的话。使用 2D 直方图函数 ( np.histogram2d()) 我设法做了类似的事情,但它没有告诉我每个 bin 中的实际点数(这是我想要得到的)。我附上了二维直方图的示例以供参考。 在此处输入图像描述 在此处输入图像描述

标签: pythonnumpymatplotlibscipyhistogram2d

解决方案


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()

可视化 np.histogram2d


推荐阅读