Способ построения отдельных пикселей на imshow-plot - PullRequest
0 голосов
/ 09 апреля 2020

Давайте предположим, что у меня в imshow есть следующее:

b = np.array([[0,0,0,0,0,0,0],
 [0,0,0,0,0,0,1],
 [0,0,0,0,0,0,0],
 [0,0,0,0,0,0,0],
 [0,0,0,0,0,0,0],
 [0,1,0,0,0,1,1],
 [0,0,0,0,0,0,0]])

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.imshow(b)

enter image description here

Есть ли способ построить пиксели, заданные единицами в следующий массив в любом желаемом цвете (например, черном)?

a = np.array([[0,0,0,0,0,0,0],
     [0,0,0,0,0,0,1],
     [0,0,0,0,0,0,0],
     [0,0,0,0,0,0,0],
     [0,0,0,0,0,0,0],
     [0,1,0,0,0,1,1],
     [0,0,0,0,0,0,0]])

Моя идея состояла в том, чтобы построить второе imshow на первом с прозрачностью, но это, очевидно, не работает, потому что оно также изменяет окружающие пиксели.

Возможно, вам придется получить индексы единиц с нумерацией, а затем вам нужно будет построить отдельные пиксели. Но я не нашел способа рисовать полные пиксели на imshows. Я думаю, что вы можете рисовать графики и точки на imshows, но без полных пикселей. Я прав или я что-то упустил?

Спасибо за помощь!

1 Ответ

0 голосов
/ 09 апреля 2020
liste = []
for index, value in np.ndenumerate(a):
        if value==1:
            liste.append(index)

for index in liste:
    index2 = (tuple(reversed((np.subtract(index, 0.5)))))
    rect = plt.Rectangle(index2, 1,1, color = 'red')
    ax.add_patch(rect)

Результат:

enter image description here

Похоже на чит-решение для использования прямоугольников. Это лучший подход, который я мог сделать.

...