はじめに
Matplotlib では、色指定として X11/CSS4 Colors と xkcd Colors の 2 系統が利用できます。
特に xkcd Colors は 954 色と数が多い一方、本家には一覧表がないため、色を選ぶ際に直感的に確認しづらいという課題があります。
この記事では、Matplotlib が内部で保持している
CSS4_COLORS と XKCD_COLORS を 色相順に並べて一覧化し、色名・色見本・HEX コードをまとめて確認できる関数を紹介します。
コードは Google Colab こちら からも実行できます。
カラーテーブルを表示する関数
Matplotlib 公式のサンプルコードをベースに、
色名の横に HEX コードを追加して表示できるように拡張した関数です。
import math
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from matplotlib.patches import Rectangle
# コード参考:https://matplotlib.org/stable/gallery/color/named_colors.html
def plot_colortable(colors, *, ncols=4, sort_colors=True):
cell_width = 350
cell_height = 22
swatch_width = 48
margin = 12
# Sort colors by hue, saturation, value and name.
if sort_colors is True:
names = sorted(
colors, key=lambda c: tuple(mcolors.rgb_to_hsv(mcolors.to_rgb(c))))
else:
names = list(colors)
n = len(names)
nrows = math.ceil(n / ncols)
width = cell_width * ncols + 2 * margin
height = cell_height * nrows + 2 * margin
dpi = 72
fig, ax = plt.subplots(figsize=(width / dpi, height / dpi), dpi=dpi)
fig.subplots_adjust(margin/width, margin/height,
(width-margin)/width, (height-margin)/height)
ax.set_xlim(0, cell_width * ncols)
ax.set_ylim(cell_height * (nrows-0.5), -cell_height/2.)
ax.yaxis.set_visible(False)
ax.xaxis.set_visible(False)
ax.set_axis_off()
for i, name in enumerate(names):
row = i % nrows
col = i // nrows
y = row * cell_height
swatch_start_x = cell_width * col
text_pos_x = cell_width * col + swatch_width + 7
# 色名
ax.text(text_pos_x, y, name, fontsize=14,
horizontalalignment='left',
verticalalignment='center')
# 追加:HEXコード
hex_pos_x = text_pos_x + 220
hex_code = mcolors.to_hex(colors[name])
ax.text(hex_pos_x, y, hex_code, fontsize=12,
horizontalalignment='left',
verticalalignment='center', color='gray')
# 色の四角
ax.add_patch(
Rectangle(xy=(swatch_start_x, y-9), width=swatch_width,
height=18, facecolor=colors[name], edgecolor='0.7')
)
return fig
X11/CSS4 Colors を一覧表示する
plot_colortable(mcolors.CSS4_COLORS, ncols=2)
plt.show()
高解像度版 PDF はこちら
xkcd Colors を一覧表示する
plot_colortable(mcolors.XKCD_COLORS, ncols=2)
plt.show()
高解像度版 PDF はこちら
補足
色の指定方法について
Matplotlib で上記のカラーを使う場合は、次の 3 通りで指定できます。
-
CSS4 Colors:
"cornflowerblue"のように色名をそのまま指定 -
XKCD Colors:
"xkcd:sky blue"のように、先頭にxkcd:を付けて指定 -
HEX コード:
"#1f77b4"のように HEX 値で指定
例:
plt.plot(x, y, color="cornflowerblue") # CSS4 Colors
plt.plot(x, y, color="xkcd:sky blue") # XKCD Colors
plt.plot(x, y, color="#1f77b4") # HEX コード
同じ色名でも色が異なる場合があるので注意
Matplotlib の色名には、X11/CSS4 と xkcd の両方に共通の名前がいくつか存在します。
しかし、同じ色名でも色が異なる場合があるので注意しましょう。
参考:
まとめ
本記事では、Matplotlib の X11/CSS4 と xkcd カラーを色相順に並べて一覧化し、
色名・色見本・HEX コードをまとめて確認できる関数を紹介しました。
xkcd Colors は 954 色と種類が多く「名前から色が想像しにくい」ケースもあるため、
一覧として俯瞰できると色選びが楽しくなると思います。
また、PowerPoint や資料作成の際にはHEXが使えるので、用途に合わせてご活用いただければ幸いです。