Matplotlib python在colormap中更改单色
问题内容:
我在python中使用颜色图来绘制和分析矩阵中的值。我需要将白色与等于0.0的每个元素相关联,而对于其他元素,我希望具有“传统”颜色图。查看 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.00000000001设置为蓝色的起点,它们也都与白色相关联。这怎么可能?如何更改它以获得我想要的东西?
问题答案:
尽管不理想,但屏蔽零值仍然有效。您可以使用来控制它的显示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)