在Python中生成颜色范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中生成颜色范围相关的知识,希望对你有一定的参考价值。

我想以(r,g,b)元组的形式生成一个颜色规范列表,它跨越整个色谱,包含我想要的多个条目。所以对于5个条目我想要的东西像:

  • (0, 0, 1)
  • (0, 1, 0)
  • (1, 0, 0)
  • (1, 0.5, 1)
  • (0, 0, 0.5)

当然,如果有比0和1的组合更多的条目,它应该转向使用分数等。最好的方法是什么?

答案

使用HSV / HSB / HSL颜色空间(三个名称或多或少相同)。生成在色调空间中均匀分布的N个元组,然后将它们转换为RGB。

示例代码:

import colorsys
N = 5
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples)
另一答案

我基于kquinn's答案创建了以下函数。

import colorsys

def get_N_HexCol(N=5):

    HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in xrange(N)]
    hex_out = []
    for rgb in HSV_tuples:
        rgb = map(lambda x: int(x*255),colorsys.hsv_to_rgb(*rgb))
        hex_out.append("".join(map(lambda x: chr(x).encode('hex'),rgb)))
    return hex_out
另一答案

调色板很有趣。您是否知道绿色相同的亮度比红色更强烈?看看http://poynton.ca/PDFs/ColorFAQ.pdf。如果您想使用预配置的调色板,请查看seaborn's palettes

import seaborn as sns
palette = sns.color_palette(None, 3)

从当前调色板生成3种颜色。

另一答案

按照kquinn和jhrf的步骤:)

对于Python 3,可以通过以下方式完成:

def get_N_HexCol(N=5):
    HSV_tuples = [(x * 1.0 / N, 0.5, 0.5) for x in range(N)]
    hex_out = []
    for rgb in HSV_tuples:
        rgb = map(lambda x: int(x * 255), colorsys.hsv_to_rgb(*rgb))
        hex_out.append('#%02x%02x%02x' % tuple(rgb))
    return hex_out

以上是关于在Python中生成颜色范围的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中生成噪声颜色

Unicode 范围以及python中生成所有Unicode的方法

python 在fasta文件中生成屏蔽范围。

在python中生成多边形范围内的随机点数

为什么我不能在此片段中生成唯一对象数组?

如何在 PyX 中生成任何颜色