web-dev-qa-db-ja.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の組み合わせよりも多くのエントリがある場合は、分数を使用するように変更する必要があります。これを行うための最良の方法は何ですか?

23

HSV/HSB/HSL色空間を使用します(ほぼ同じものには3つの名前があります)。色相空間に均等に広がる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)
46
kquinn

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
8
jhrf

カラーパレットは面白いです。たとえば、緑と同じ明るさが、赤などよりも強く知覚されることをご存知ですか? http://poynton.ca/PDFs/ColorFAQ.pdf をご覧ください。設定済みのパレットを使用したい場合は、 seabornのパレット をご覧ください。

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

現在のパレットから3色を生成します。

8
serv-inc

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
7
ceprio