matplotlib colormap提供重复值

时间:2017-09-29 08:50:35

标签: python matplotlib colormap

最近我使用这种方法基本上在这个色图上选择了6个相同的值。

import matplotlib.pyplot as plt
import numpy as np
ints = np.linspace(0,255,6)
ints = [int(x) for x in ints]
newcm = plt.cm.Accent(ints)

通常这会返回colormap值没问题。现在当我运行它时,newcm获得的输出是:

Out[25]: 
array([[ 0.49803922,  0.78823529,  0.49803922,  1.        ],
       [ 0.4       ,  0.4       ,  0.4       ,  1.        ],
       [ 0.4       ,  0.4       ,  0.4       ,  1.        ],
       [ 0.4       ,  0.4       ,  0.4       ,  1.        ],
       [ 0.4       ,  0.4       ,  0.4       ,  1.        ],
       [ 0.4       ,  0.4       ,  0.4       ,  1.        ]])

所以现在事情并没有正确。我也试过bytes=True,但行为是一样的。其他人是否得到了相同的结果,还是我的matplotlib上的一些有趣的设置已经出错?

此外 - 似乎这种情况尤其发生在Accent色彩映射上,但不一定是其他色彩映射。

1 个答案:

答案 0 :(得分:2)

通常,色图的范围在0到1之间。在np.linspace(0,255,6)中除了第一个以外的所有值都大于1,因此除了该列表的第一个项之外,所有值都得到对应于最大值1的输出

如果您使用numbers = np.linspace(0,1,6),则会从该色彩映射中获得6个不同的值。

import matplotlib.pyplot as plt
import numpy as np

numbers = np.linspace(0,1,6)
newcm = plt.cm.Accent(numbers)
print(newcm)

产生

[[ 0.49803922  0.78823529  0.49803922  1.        ]
 [ 0.74509804  0.68235294  0.83137255  1.        ]
 [ 1.          1.          0.6         1.        ]
 [ 0.21960784  0.42352941  0.69019608  1.        ]
 [ 0.74901961  0.35686275  0.09019608  1.        ]
 [ 0.4         0.4         0.4         1.        ]]