Как построить только некоторые ячейки с определенными значениями массива, а другие не с matplotlib.pyplot? - PullRequest
1 голос
/ 07 июня 2019

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

Ì попробовал следующий код, и я также изменил альфа у на 1. Проблема в том, что либо красные окна у меняются с х (альфа у = 0,5), либо вы даже не можете видеть графики x (альфа y = 1).

import matplotlib.pyplot as plt
import numpy as np

x = np.random.random(size=(20,20))
y = np.random.randint(2, size=(20,20))

fig = plt.figure()
plt.imshow(x, cmap="Greys", alpha = 0.5)
plt.imshow(y, cmap="Reds", alpha = 0.5)
plt.show()

Как я могу построить только те из y?

UPDATE: Спасибо за ответ! Но это не хочу, я ищу. Я объясню еще раз:

Результат должен быть примерно таким: x в качестве фона, и каждая позиция, где y равно 1, должна быть окрашена в чисто красный цвет.

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Мы можем инвертировать "Результат должен быть [..] x в качестве фона, и каждая позиция, где y равно 1, должна быть окрашена в чисто красный цвет." , а именно, чтобы просто построить x, замаскированный на y и установите красный фон.

import matplotlib.pyplot as plt
import numpy as np

y = np.random.randint(2, size=(20,20))
x = np.random.random(size=(20,20))
X = np.ma.array(x, mask=y)

fig = plt.figure()

plt.imshow(X, cmap="Greys")
plt.gca().set_facecolor("red")
plt.show()

enter image description here

Конечно, есть вопросы и ответы, подобные

Matplotlib imshow: как наложить маску на матрицу или Как отобразить значения NaN как специальный цвет с помощью imshow в matplotlib?

и на странице matplotlib также есть пример: Изображение в маске

0 голосов
/ 07 июня 2019

Следуя подходу в этом ответе, связанном с @ImportanceOfBeingEarnest, точное решение в вашем случае будет выглядеть следующим образом. Здесь np.ma.masked_where замаскирует ваш массив y в тех местах, где он равен 0. Полученный массив будет содержать только 1.

РЕДАКТИРОВАТЬ: Кажется, проблема наложения возникает из-за выбора cmap. Если вы не укажете cmap для y, вы можете ясно увидеть ниже, что на самом деле только 1 нанесены и наложены на вершину x. Чтобы иметь отдельный цвет (красный в вашем случае), вы можете создать собственную цветовую карту

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors

x = np.random.random(size=(20,20))
y = np.random.randint(2, size=(20,20))

y_new =np.ma.masked_where(y==0, y)
cmap = colors.ListedColormap(['red'])

fig = plt.figure()
plt.imshow(x, cmap="Greys", alpha = 0.5)
plt.imshow(y_new, cmap=cmap, alpha=1)
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...