Pynote

Python、機械学習、画像処理について

Python - グラフの作成などに使える色を自動で作る方法

概要

Python でグラフの作成などに使える色を自動で作る方法を紹介する。

ランダムに色を生成する。

色の一覧を描画する関数を作る。

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)

def draw_colors(colors):
    rows = np.ceil(len(colors) / 10)
    
    fig = plt.figure(figsize=(7, 7))
    for i, color in enumerate(colors, 1):
        img = color.reshape(1, 1, 3)
        ax = fig.add_subplot(rows, 10, i)
        ax.imshow(img)
        ax.set_axis_off()
    plt.show()

色は (r, g, b) の3つの値で表され、値の範囲は [0, 1] の float または [0, 255] の int のどちらであり、ライブラリによって異なる。
そのため、例えば、100色ランダムに作りたい場合は以下のようにすればよい。

num_colors = 100
# (N, 3) で各値が [0, 1] の float である配列を作成する。
colors = np.random.rand(num_colors, 3)

draw_colors(colors)


連続的に変化する色を作成する。

ランダムに色を生成する欠点として、似た色ができてしまうことがある。
そのため、連続的に変化する色を作成する方法も紹介する。
色空間を RGB から HSV に変換してから、色相 (Hue) を段階的に変化させるのがよい。

import colorsys

num_colors = 100
colors = np.array([colorsys.hsv_to_rgb(h, 0.8, 0.8)
                   for h in np.linspace(0, 1, num_colors)])

draw_colors(colors)