matplotlib - случайным образом выбирает N точек из двумерного массива и строит график пространственного рассеяния - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть графики, подобные следующему: enter image description here

Левый график: исходные 100 * 100 пустых данных

Правый график: что я хочу - случайным образом выберите Nданные из исходных данных и нанесите их на график поверхности

Как можно случайным образом выбрать N номеров данных на левом графике и нанести выбранные данные на график рассеяния, как на правом графике?

Я использовал ax.imshow(data) для создания графика поверхности слева.data является двумерным массивом numpy.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Если вы хотите раскрасить случайно выбранные точки в соответствии с изображением, вы можете использовать ту же цветовую карту и нормализацию для разброса, что и для изображения.

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

0 голосов
/ 21 ноября 2018

Вам просто нужно выбрать N чисел из 10000 (100 х 100) уникальных точек на 2-м графике.Я полагаю, вы хотите без замены.Затем вы можете "распутать" их по вашей координате 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])
...