"Color for Value"未按预期工作



如果我运行以下命令:

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.是最后一种颜色。
  • 用索引调用它,即0n-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)

比除以颜色数得到相应的浮点值要容易得多。

推荐阅读:

  • 颜色图参考
  • 色彩图教程

最新更新