matplotlib - 从二维数组中随机选取 N 个点,绘制空间散点图

matplotlib - randomly pick N points from 2D array, and plot spatial scatter plot

我有如下图:

左图:原始 100 * 100 numpy 数据

右图:我想要的-从原始数据中随机选择N个数据,绘制在曲面图上

如何从左图中随机选择N个数据,并像右图一样在散点图上绘制所选数据?

我用ax.imshow(data)生成了左边的曲面图。 data 是一个二维 numpy 数组。

您只需从二维图上的 10,000 (100 x 100) 个唯一点中选择 N 个数字。我假设你想要没有更换。然后你可以 "unravel" 它们到你的 x,y 坐标上。

random_choices = np.random.choice(10000, size=N, replace=False)
x, y = np.unravel_index(random_choices, (100, 100))

您可以使用这些索引来适当地创建散点图和大小点:

data = np.random.random((100, 100))
plt.scatter(x, y, s=data[y, x])

如果您想根据图像为随机选择的点着色,您可以对散点使用与图像相同的颜色图和归一化。

import numpy as np
import matplotlib.pyplot as plt

original_data = np.random.rand(100,100)

fig, (ax, ax2) = plt.subplots(ncols=2)
im = ax.imshow(original_data, cmap="summer")


N = 89
x = np.random.randint(0,100,size=N)
y = np.random.randint(0,100,size=N)

random_sample = original_data[x,y]
sc = ax2.scatter(x,y,c=random_sample, cmap=im.cmap, norm=im.norm)

ax2.set_aspect("equal")
ax2.set(xlim=ax.get_xlim(), ylim=ax.get_ylim())

fig.colorbar(sc, ax=[ax,ax2], orientation="horizontal")
plt.show()