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


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

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

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

Есть ли способ передать маску imshow Как восстановить двумерный массив?

1 4

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()