左图:原始100 * 100 numpy数据
右图:我想要的-从原始数据中随机选择N个数据,然后将它们绘制在表面图上
如何从左图中随机选择N个数据,然后将所选数据绘制在散点图上(如右图)?
我使用ax.imshow(data)
来生成左侧的表面图。 data
是2D numpy数组。
答案 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()
答案 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])