[Python][Matplotlib] 色の形式を変換する
環境
Windows10 + Python 3.7.6 + Matplotlib 3.1.1
maptlotlib.colors
モジュールには、色を表現する変数を変換する関数が用意されており、なかなか便利そうだったのでまとめてみた。
HSV(0~1)からRGB(0~1)へ
hsv_to_rgb(hsv)
例
import matplotlib.colors as mcolors color_hsv = (0, 1, 1) color_rgb = mcolors.hsv_to_rgb(color_hsv) print(color_rgb)
[1. 0. 0.]
RGB(0~1)からHSV(0~1)へ
rgb_to_hsv(rgb)
例
import matplotlib.colors as mcolors color_rgb = (1, 0, 0) color_hsv = mcolors.rgb_to_hsv(color_rgb) print(color_hsv)
[0. 1. 1.]
RGB(0~1)から16進数へ
to_hex(c[, keep_alpha])
- 引数
- c : RGBに対応する長さ3のシーケンスなど
- 返り値
- hex : 16進数の文字列
例
import matplotlib.colors as mcolors color_rgb = (1, 0, 0) color_hex = mcolors.to_hex(color_rgb) print(color_hex)
#ff0000
16進数からRGB(0~1)へ
to_rgb(c)
- 引数
- c : 16進数の文字列など
- 返り値
- rgb : RGBに対応する長さ3のシーケンス
例
import matplotlib.colors as mcolors color_hex = '#ff0000' color_rgb = mcolors.to_rgb(color_hex) print(color_rgb)
(1.0, 0.0, 0.0)
Matplotlibで名前の付いている色の一覧の取得
get_named_colors_mapping()
- 引数:なし
- 返り値
- matplotlib.colors._ColorMapping:色の名前と16進数表記が対応づけられた辞書のようなオブジェクト
例
import matplotlib.colors as mcolors named_colors = mcolors.get_named_colors_mapping() print(named_colors['red']) print(named_colors['xkcd:rust brown'])
#FF0000 #8b3103
メモ:matplotlib.colors._ColorMappingについて
このオブジェクトについて公式ドキュメントで説明を見つけられなかったので、実装を見に行ったところ、次のようなコードを見つけた。ほとんど組み込みの辞書と変わらないオブジェクトと思われる。
class _ColorMapping(dict): def __init__(self, mapping): super().__init__(mapping) self.cache = {} def __setitem__(self, key, value): super().__setitem__(key, value) self.cache.clear() def __delitem__(self, key): super().__delitem__(key) self.cache.clear()
ちなみにget_named_colors_mapping()
は次のように実装されていた。_colors_full_map
変数を返すだけ。_colors_full_map
変数ははじめは組み込みの辞書だが、最後に_ColorMapping
オブジェクトに変換されている。
_colors_full_map = {} # Set by reverse priority order. _colors_full_map.update(XKCD_COLORS) _colors_full_map.update({k.replace('grey', 'gray'): v for k, v in XKCD_COLORS.items() if 'grey' in k}) _colors_full_map.update(CSS4_COLORS) _colors_full_map.update(TABLEAU_COLORS) _colors_full_map.update({k.replace('gray', 'grey'): v for k, v in TABLEAU_COLORS.items() if 'gray' in k}) _colors_full_map.update(BASE_COLORS) _colors_full_map = _ColorMapping(_colors_full_map) def get_named_colors_mapping(): """Return the global mapping of names to named colors.""" return _colors_full_map