如果我运行以下命令:
print(cm.jet(0))
print(cm.jet(0.25))
print(cm.jet(0.5))
print(cm.jet(0.75))
print(cm.jet(0.99))
print(cm.jet(1))
我得到:
(0.0, 0.0, 0.5, 1.0)
(0.0, 0.503921568627451, 1.0, 1.0)
(0.4901960784313725, 1.0, 0.4775458570524984, 1.0)
(1.0, 0.5816993464052289, 0.0, 1.0)
(0.535650623885918, 0.0, 0.0, 1.0)
(0.0, 0.0, 0.517825311942959, 1.0)
所以我得到了 0 和 1 的相同颜色。我做错了什么吗?我使用的是 matplotlib 的 2.1.2 版和 python 的 3.5 版。
更新
好的,它与 int 和 float 有关。
所以:
print(cm.jet(0))
print(cm.jet(0.25))
print(cm.jet(0.5))
print(cm.jet(0.75))
print(cm.jet(0.99))
print(cm.jet(1.0))
print(cm.jet(1))
给:
(0.0, 0.0, 0.5, 1.0)
(0.0, 0.503921568627451, 1.0, 1.0)
(0.4901960784313725, 1.0, 0.4775458570524984, 1.0)
(1.0, 0.5816993464052289, 0.0, 1.0)
(0.535650623885918, 0.0, 0.0, 1.0)
(0.5, 0.0, 0.0, 1.0)
(0.0, 0.0, 0.517825311942959, 1.0)
这确实令人困惑。有两种方法可以从颜色图中获取颜色。
- 使用
0.
和1.
之间的 ('n 数组( 浮点值调用它。这里0.
是地图的第一种颜色,1.
是最后一种颜色。 - 用索引调用它,即
0
和n-1
之间的整数值('n 数组(,其中n
是颜色图中的颜色数量。许多颜色图有 256 种颜色,但您可以检查N
属性,例如print(cm.jet.N)
打印256
.
这意味着您可以通过以下方式获得相同的颜色
from matplotlib import cm
cm.jet(0.0) == cm.jet(0)
cm.jet(1.0) == cm.jet(255)
cm.jet([0.0, 0.5, 1.0]) == cm.jet([0, 128, 255])
在"连续"颜色图的情况下,如jet
或默认viridis
,您通常会确保使用浮点数,根本不关心索引。
在"离散"颜色图的情况下,tab10
索引变得有趣。 例如,tab10
颜色图仅包含 10 种颜色。要获取该颜色图的第三种颜色,请调用
cm.tab10(2)
比除以颜色数得到相应的浮点值要容易得多。
推荐阅读:
- 颜色图参考
- 色彩图教程