Matplotlib imshow: как применить маску к матрице

Я пытаюсь графически анализировать 2D-данные. matplotlib.imshow очень полезен в этом, но я чувствую, что мог бы использовать это еще больше, если бы я мог исключить некоторые ячейки из моей матрицы, значения которых находятся за пределами интересующего диапазона. Моя проблема в том, что эти значения «выравнивают» цветовую карту в интересующем меня диапазоне. Я мог бы иметь большее цветовое разрешение после исключения этих значений.

Я знаю, как применить маску к моей матрице, чтобы исключить эти значения, но после применения маски она возвращает объект 1d:

mask = (myMatrix > lowerBound) & (myMatrix < upperBound)
myMatrix = myMatrix[mask] #returns a 1d array :(

Есть ли способ передать маску imshow, как восстановить массив 2d?


person Learning is a mess    schedule 07.10.2015    source источник


Ответы (1)


Вы можете использовать numpy.ma.mask_where для сохранения формы массива, например.

import numpy as np
import matplotlib.pyplot as plt

lowerBound = 0.25
upperBound = 0.75
myMatrix = np.random.rand(100,100)

myMatrix =np.ma.masked_where((lowerBound < myMatrix) & 
                             (myMatrix < upperBound), myMatrix)


fig,axs=plt.subplots(2,1)
#Plot without mask
axs[0].imshow(myMatrix.data)

#Default is to apply mask
axs[1].imshow(myMatrix)

plt.show()

введите здесь описание изображения

person Ed Smith    schedule 07.10.2015