matplotlib 在色彩Map表中更改单一颜色

icnyk63a  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(129)

我使用python中的colormap来绘制和分析矩阵中的值。我需要将白色颜色与每个等于0.0的元素相关联,而对于其他元素,我希望有一个“传统”的颜色Map。查看Python Matplotlib Colormap,我修改了pcolor使用的字典:

dic = {'red': ((0., 1, 1), 
               (0.00000000001, 0, 0), 
               (0.66, 1, 1), 
               (0.89,1, 1), 
               (1, 0.5, 0.5)), 
       'green': ((0., 1, 1), 
                (0.00000000001, 0, 0), 
                (0.375,1, 1), 
                (0.64,1, 1), 
                (0.91,0,0), 
                (1, 0, 0)), 
       'blue': ((0., 1, 1), 
               (0.00000000001, 1, 1), 
               (0.34, 1, 1), 
               (0.65,0, 0), 
               (1, 0, 0))}

结果为:

我设置:

matrix[0][0]=0 matrix[0][1]=0.002

但是正如你所看到的,它们都与白色相关联,即使我将0.0000000001设置为蓝色的起点。这怎么可能?我如何改变它以获得我想要的?

snz8szmq

snz8szmq1#

虽然不理想,但屏蔽零值是有效的。您可以使用cmap.set_bad()控制它的显示。

from matplotlib.colors import LinearSegmentedColormap
import matplotlib.pyplot as plt
import numpy as np

dic = {'red': ((0., 1, 0), 
               (0.66, 1, 1), 
               (0.89,1, 1), 
               (1, 0.5, 0.5)), 
       'green': ((0., 1, 0), 
                (0.375,1, 1), 
                (0.64,1, 1), 
                (0.91,0,0), 
                (1, 0, 0)), 
       'blue': ((0., 1, 1), 
               (0.34, 1, 1), 
               (0.65,0, 0), 
               (1, 0, 0))}

a = np.random.rand(10,10)
a[0,:2] = 0
a[0,2:4] = 0.0001

fig, ax = plt.subplots(1,1, figsize=(6,6))

cmap = LinearSegmentedColormap('custom_cmap', dic)
cmap.set_bad('white')

ax.imshow(np.ma.masked_values(a, 0), interpolation='none', cmap=cmap)

相关问题