Вы можете сначала создать пустые пиксели, либо с нулями (получает «самый низкий» цвет), либо с NaN (эти пиксели будут невидимыми). Затем вы можете использовать интеллектуальную индексацию numpy для заполнения значений. Чтобы это работало, важно, чтобы map_pos_x
и map_pos_y
были целочисленными координатами в правильном диапазоне.
import numpy as np
import matplotlib.pyplot as plt
map_pos_x = np.random.randint(100, size=100)
map_pos_y = np.random.randint(100, size=100)
draw = np.random.random(100)
# testmap = np.full((100,100), np.nan)
testmap = np.zeros((100,100))
testmap[map_pos_x, map_pos_y] = draw
plt.matshow(testmap)
plt.show()
![first plot](https://i.stack.imgur.com/oTE4F.png)
PS : О вашем новом вопросе, чтобы посчитать, сколько позиций xy совпадают, можно использовать np.histogram2d
. Результат также можно построить с помощью matshow
. Преимущество состоит в том, что значения xy не обязательно должны быть целыми числами: они будут суммироваться в зависимости от их округленных значений.
Если каждая позиция xy также имеет значение, такое как массив draw
в вопросе , это может быть передано как np.histogram2d(...., weights=draw)
.
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1234)
N = 100
map_pos_x = np.random.randint(N, size=10000)
map_pos_y = np.random.randint(N, size=len(map_pos_x))
fig, (ax1, ax2) = plt.subplots(ncols=2)
testmap1, xedges, yedges = np.histogram2d(map_pos_x, map_pos_y, bins=N, range=[[0, N - 1], [0, N - 1]])
ax1.matshow(testmap1)
plt.show()
Чтобы показать, что происходит, вот тест с N=10
с matshow
слева. Справа - точечная диаграмма с полупрозрачными точками, которая делает их темнее, когда совпадают другие точки.
![second plot](https://i.stack.imgur.com/0je83.png)