我正在尝试以图形方式分析2D数据。 matplotlib.imshow在这方面非常有用,但是我觉得如果可以从矩阵中排除某些单元格(感兴趣范围之外的值),则可以使用更多的代码。我的问题是这些值会在我感兴趣的范围内“拉平”颜色表。排除这些值后,我可以拥有更高的色彩分辨率。

我知道如何在矩阵上应用 mask 以排除这些值,但是在应用 mask 后它将返回一个1d对象:

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

有没有一种方法可以将 mask 传递给imshow,以重建二维数组?

最佳答案

您可以使用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()
python - Matplotlib imshow : how to apply a mask on the matrix-LMLPHP

10-08 06:40