最近我使用这种方法基本上在这个色图上选择了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色彩映射上,但不一定是其他色彩映射。
答案 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. ]]