“颜色的价值”没有按预期工作

时间:2018-05-22 08:18:48

标签: matplotlib

如果我运行以下内容:

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)

1 个答案:

答案 0 :(得分:2)

这确实令人困惑。有两种方法可以从colormap获取颜色。

  • 使用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种颜色。要获得该colormap的第三种颜色,请调用

cm.tab10(2)

比分割颜色数要容易得到相应的浮点值。

建议阅读: