Matplotlib imshow:如何在矩阵上应用遮罩
Matplotlib imshow: how to apply a mask on the matrix
我正在尝试以图形方式分析二维数据。 matplotlib.imshow
在这方面非常有用,但我觉得如果我可以从我的矩阵中排除一些单元格(超出感兴趣范围的值),我可以更多地利用它。我的问题是这些值“'flatten'”是我感兴趣范围内的颜色图。排除这些值后我可以获得更高的颜色分辨率。
我知道如何在我的矩阵上应用蒙版来排除这些值,但它 returns 应用蒙版后的一维对象:
mask = (myMatrix > lowerBound) & (myMatrix < upperBound)
myMatrix = myMatrix[mask] #returns a 1d array :(
有没有办法将掩码传递给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()
我正在尝试以图形方式分析二维数据。 matplotlib.imshow
在这方面非常有用,但我觉得如果我可以从我的矩阵中排除一些单元格(超出感兴趣范围的值),我可以更多地利用它。我的问题是这些值“'flatten'”是我感兴趣范围内的颜色图。排除这些值后我可以获得更高的颜色分辨率。
我知道如何在我的矩阵上应用蒙版来排除这些值,但它 returns 应用蒙版后的一维对象:
mask = (myMatrix > lowerBound) & (myMatrix < upperBound)
myMatrix = myMatrix[mask] #returns a 1d array :(
有没有办法将掩码传递给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()