在Python中生成颜色范围

38 投票
5 回答
82627 浏览
提问于 2025-04-15 11:40

我想生成一个颜色规格的列表,格式是(r, g, b)的元组,这些颜色要覆盖整个颜色范围,而且我希望有尽可能多的条目。比如说,如果我想要5个条目,我希望得到这样的结果:

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

当然,如果条目的数量超过了0和1的组合,那就应该开始使用分数等等。这样做的最佳方法是什么呢?

5 个回答

14

按照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
44

颜色调色板很有趣。你知道吗?同样亮度的绿色,看起来比红色要更鲜艳、更明显。想了解更多,可以看看这个链接:http://poynton.ca/PDFs/ColorFAQ.pdf。如果你想使用一些已经配置好的调色板,可以看看seaborn的调色板

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

这个代码会从当前的调色板中生成3种颜色。

62

使用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)

撰写回答