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

时间:2018-11-21 00:41:22

标签: python matplotlib 2d surface

我有如下图: enter image description here

左图:原始100 * 100 numpy数据

右图:我想要的-从原始数据中随机选择N个数据,然后将它们绘制在表面图上

如何从左图中随机选择N个数据,然后将所选数据绘制在散点图上(如右图)?

我使用ax.imshow(data)来生成左侧的表面图。 data是2D numpy数组。

2 个答案:

答案 0 :(得分:1)

如果要根据图像对随机选择的点进行着色,则可以使用与图像相同的色图和归一化。

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

enter image description here

答案 1 :(得分:0)

您只需要从2d图上的10,000(100 x 100)个唯一点中选择N个数字。我想你想不用更换。然后,您可以将它们“解散”到您的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])