在Python中生成颜色范围

Sve*_*ier 22 python colors

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

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

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

kqu*_*inn 44

使用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)
Run Code Online (Sandbox Code Playgroud)

  • 很酷,然后使用colorsys.hsv_to_rgb我得到了我需要的:).[colorsys.hsv_to_rgb(x*1.0/N,0.5,0.5),范围(N)中的x]. (2认同)
  • 如果你想在`RGB_tuples`中使用索引,在Python 3中你必须从`map`中创建一个`list`,它是一个生成器,只需`list(map(lambda...))` (2认同)
  • 在Python 3中,你不需要`x*1.0/N`,`x/N`总是产生浮点结果。要获得整数结果,您需要执行“x//N” (2认同)

jhr*_*hrf 8

我根据kquinn的答案创建了以下函数.

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
Run Code Online (Sandbox Code Playgroud)


cep*_*rio 6

遵循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
Run Code Online (Sandbox Code Playgroud)


ser*_*inc 5

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

import seaborn as sns
palette = sns.color_palette(None, 3)
Run Code Online (Sandbox Code Playgroud)

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

  • 整篇论文只讨论颜色理论,但整篇文章中没有单一颜色!令人印象深刻。 (2认同)