Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

matplotlibの色名一覧

matplotlibの色名一覧
 
f:id:rare_Remrin:20170505171728p:plain
 

この色名一覧はpythonで書かれていて、同じページにコードも載っています。
あとでゆっくりコードを読んでみようと思います。
 

# coding: utf-8

from __future__ import division

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors

colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)

# (HSV形式,色名)というタプルに直し、Hをキーにしてソートしたリストにする
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
                for name, color in colors.items())
# sortしたタプルのリストから、色名だけを抜き出したリストを作る
sorted_names = [name for hsv, name in by_hsv]


n = len(sorted_names)   # 8色 + 148色 = 全156色
ncols = 4               # 列数を4にする。他の数でもよい
nrows = n // ncols + 1  # 行数を計算

fig, ax = plt.subplots(figsize=(8, 5)) # 横8インチ、縦5インチ

# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)   # 1マスの縦のドット数
w = X / ncols         # 1マスの横のドット数

for i, name in enumerate(sorted_names):
    col = i % ncols            # 0番 1番 2番 3番
    row = i // ncols           # 4番 5番 6番 7番 ...のように割り振る
    y = Y - (row * h) - h      # 表示するy座標

    xi_line = w * (col + 0.05) # 長方形の左端のx座標
    xf_line = w * (col + 0.25) # 長方形の右端のx座標
    xi_text = w * (col + 0.3)  # 色名の文字列を表示するx座標

    # 左よせで文字を表示
    ax.text(xi_text, y, name, fontsize=(h * 0.8),
            horizontalalignment='left',
            verticalalignment='center')
    # hlines(横向きの直線)として色つきの長方形を表示
    ax.hlines(y + h * 0.1, xi_line, xf_line,
              color=colors[name], linewidth=(h * 0.6))

ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()

fig.subplots_adjust(left=0, right=1,
                    top=1, bottom=0,
                    hspace=0, wspace=0)
plt.show()

わからないことが多すぎるので、いろいろ確認してみた。
・mcolors.BASE_COLORS : 
 8つの基本色。アルファベット1文字で表す。
 色名:RGBの辞書型になっている。 

print(mcolors.BASE_COLORS)
# {'y': (0.75, 0.75, 0), 'm': (0.75, 0, 0.75), 'r': (1, 0, 0), 
#  'c': (0, 0.75, 0.75), 'k': (0, 0, 0), 'g': (0, 0.5, 0), 
#  'w': (1, 1, 1), 'b': (0, 0, 1)}

 
・mcolors.CSS4_COLORS
 148色の(色名:16進コード)の辞書型

print(len(mcolors.CSS4_COLORS))
# 148

print(mcolors.CSS4_COLORS)
# {'oldlace': '#FDF5E6', 'limegreen': '#32CD32', 'palevioletred': '#DB7093',
# 'mintcream': '#F5FFFA', 'rosybrown': '#BC8F8F', 'blueviolet': '#8A2BE2', 
# 'lime': '#00FF00', 'orange': '#FFA500', 'mediumorchid': '#BA55D3', ...

 
参考:
color example code: named_colors.py — Matplotlib 2.0.1 documentation