如何将二维散点图折叠成点图?

How to collapse 2D scatter plot into a dot plot?

我有一个非常大的二维数组,形状为 (186295, 2),每个双元素子数组的第一个元素是 x,第二个元素是 y。这是我如何通过在 matplotlib:

中分离 x 和 y 分量来生成散点图
ax.scatter(A[:, 0]+np.random.uniform(-.02, .02, A.shape[0]), A[:, 1], s=2, color='b', alpha=0.5, zorder=3)

不过,我想

x 值在 [8,9.2] 范围内的所有点在中点显示为散点图 x=8.6,

x 值在 [9.2,10.4] 范围内的所有点在中点显示为散点图 x=9.8,

x 值在 [10.4,12.2] 范围内的所有点在中点显示为点图 x=11.3.

非常感谢您的帮助,

您可以使用 np.select:

示例:

import numpy as np
from matplotlib import pyplot as plt

n=100
x = np.random.uniform(8, 12, n)
y = np.random.uniform(.01, 1, n)
a = np.array(list(zip(x,y)))


fig,ax = plt.subplots(2, sharex=True)
ax[0].scatter(a[:,0], a[:,1])
ax[0].title.set_text('Scatter Plot')

conditions = [a[:,0]<=8, a[:,0]<=9.2, a[:,0]<=10.4, a[:,0]<=12.2, a[:,0]>12.2]
choices = [a[:,0], 8.6, 9.8, 11.3, a[:,0]]
a[:,0] = np.select(conditions, choices)

ax[1].scatter(a[:,0], a[:,1])
ax[1].title.set_text('Dot Plot')

结果:

另一种可能性是使用 np.digitize,因为它使用 bin 列表(上限)而不是条件列表,因此可以节省一些输入。