将 cmap 与不包含白色的渐变一起使用时将背景颜色设置为白色

Setting background color to white when using cmap with a gradient that doesn't contains white

所以我有这个矩阵,定义如下:

for row in range (0,squareSize):
            for col in range (0,squareSize):
                if new_matrix[row][col]==1:
                    new_matrix[row][col]=color_matrix[row][col] #gradient given by values in color_matrix 
                if new_matrix[row][col]==2:
                    new_matrix[row][col]=150 #color red
                if new_matrix[row][col]==0:
                    new_matrix[row][col]=100 #color purple

SquareSize为185,为0的项为圆内的点,为2的项为方内圆外的点。 两者都映射到不同的颜色,其余的根据给定的颜色渐变映射:

cmap = mpl.cm.hsv

绘制后使用:

plt.matshow(new_matrix, interpolation='nearest',cmap=cmap)

这是输出:

但是,我希望圆圈是白色的...这不是渐变颜色的一部分:(我该怎么做?

您可以将想要显示为白色的那些值设置为NaN。这将完全阻止它们被绘制,以便在这些区域中显示背景颜色。默认情况下背景是白色的,所以它们会以白色显示。

import matplotlib.pyplot as plt
import numpy as np

x,y=np.meshgrid(np.arange(185),np.arange(185))
data = np.exp(-((x-185//2)**2+(y-185//2)**2)/60.**2)

data[(x-185//2)**2+(y-185//2)**2 > 80**2 ] = np.nan

plt.imshow(data, cmap=plt.cm.hsv)
plt.colorbar()
plt.show()