【问题标题】:Is there a way to bin a set of 2D coordinates in Python有没有办法在 Python 中对一组 2D 坐标进行分箱
【发布时间】:2021-06-14 20:01:40
【问题描述】:

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

【问题讨论】:

  • ^^ 这正是我想要的谢谢

标签: python numpy matplotlib scipy histogram2d


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 2015-11-29
    • 2021-09-21
    • 2011-02-26
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多