如何将二维散点图折叠成点图?
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 列表(上限)而不是条件列表,因此可以节省一些输入。
我有一个非常大的二维数组,形状为 (186295, 2),每个双元素子数组的第一个元素是 x,第二个元素是 y。这是我如何通过在 matplotlib
:
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 列表(上限)而不是条件列表,因此可以节省一些输入。