matplotlib(Pylab):如何指定用于绘制的替换的HTML颜色代码



我遇到了一个我怀疑的问题,该问题与解析器中的替换顺序有关。

来自matplotlib文档,它具有:

"对于更大的颜色,您有两个选项。您可以使用HTML六角字符串指定颜色,如:

color = '#eeefff'"

我喜欢这种方法,因为它为我提供了(对我来说)易于理解的颜色值 - 因此易于以编程方式设置为我想要实现的颜色选择。因此,我有一个代码段,例如,绿色越来越明亮的值之间的周期(或至少这就是我想要实现的目标):

for t in range(runtime):
...
 green = 0x008000
    if t < 32:
       x_vals = [x for line in film.frames[t] for x in range(len(line)) if line[x] > 0]
       y_vals = [y for y in range(len(film.frames[t])) for x in film.frames[t][y] if x > 0]
       if len(y_vals) > 0:
          pylab.scatter(x_vals, y_vals, color=('#%x' % green), s=8, marker='s')
       green += 0x400
       if green > 0x00FF00: green = 0x00FF00

...除了这不起作用。我得到的是:

ValueError: to_rgba: Invalid rgba arg "#"
to_rgb: Invalid rgb arg "#"
invalid hex color string "#"

正如我提到的

pylab.scatter(x_vals, y_vals, color='#008000, s=8, marker='s')

事情似乎有效。

那么,如何将替换的HTML颜色值在图函数中获取?似乎这应该是一个完全正确的句法形式的简单问题 - 但我无法猜测那是什么。

我绝对没有的一件事!!!想最终要做的是使用文档中的"替代"浮点元组的方法:

或者您可以通过R,G,B元组,R,G,B中的每个 范围[0,1]。

因为:

1)浮点值始终是一个近似值,因此映射到整体的RGB颜色空间中,如果您的计算方式差以获得不精确的颜色,则有可能是您选择的(或不太满意)选择)

2)至少在我看来,彩色规范的十六进制三重态方法至少是直观和显而易见的。虽然很容易考虑他们将如何映射到0-1的颜色空间,但我宁愿不必求助于该方法,因为这意味着我的脑海中以及代码中的"翻译" - 您'd必须这样做,例如绿色= hex_green/0x100(或者确实是对吗?)[0,1]空间实际上映射为[0,1) - 使得HEX 255少于映射到概念上的float 1,还是它们映射0,1在闭合范围内的256个值[0,1]中的空间映射中,以便1 = 255等。因此,映射不是直观的,实际上有些模棱两可。

因此,除非实际上没有选项,否则如果要使用计算的替换,则使用三重态表单,如果确实是,命令解析器的低级设计除了文本文字文字外,没有其他选项,如果您想使用HTML颜色规范,那么我宁愿不会使用这样的解决方法为"解决方案"提供。但是,如果这是完全可以做到的唯一方法,请告诉我。

谢谢。

问题似乎在开始时缺少零。Python去除对数值并不重要的零。

'{0:06x}'.format(green)使用它使其始终与零的粘合在一起,达到6位数字。

In [221]: '{0:x}'.format(green)
Out[221]: '8000'
In [222]: '{0:06x}'.format(green)
Out[222]: '008000'

'%06.x' %green如果要使用此语法,也有效。