「matplotlib 色 一覧」で検索するのはもう止めよう

## Abstract

matplotlibで使える色は沢山あります。なので使いたい色を探す際には「matplotlib 色 一覧」と検索される方が多いでしょう。本記事ではコマンドラインに色の一覧を表示させることで、色の一覧確認のためにわざわざブラウザを開く手間を省く[mplcolors](https://github.com/AstroBarker/mplcolors)を紹介します。

## 環境

一応今回の記事の環境を。Pythonを動かせれば大きな違いはないかと思います。

- Windows 10
- Python 3.7.9

もちろんですが、matplotlibが使えなければ意味がありません。念のため注意。

## mplcolors

[mplcolors](https://github.com/AstroBarker/mplcolors)紹介

>Tired of searching "matplotlib colors" every week/day/hour? This simple script displays them all conveniently right in your terminal emulator! This uses matplotlib.colors to get color names and RGB values and prints with ANSI escape sequences.

ターミナル上で、matplotlibで使える色の一覧を表示するスクリプト(Python)です。
例えば以下のように表示されます。

![](https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fmatplotlib.org%2F2.1.1%2F_images%2Fsphx_glr_named_colors_001.png&f=1&nofb=1)

>This requires a terminal with true color support. Notably, Mac's Terminal.app does not have this and so the colors cannot be properly displayed. I'm not sure that that is a workaround for this. On Mac I suggest switching to a different terminal emulator with more modern support such as kitty or iTerm.

注意点として、Macのデフォルトのターミナルではうまく動作しないようです。

### 導入

git使える人は適当なディレクトリでいつものようにcloneすればよいですね。

```
$ git clone https://github.com/AstroBarker/mplcolors.git
```

使えない・未導入の場合はzipでもダウンロードできます。
[mplcolors](https://github.com/AstroBarker/mplcolors)にアクセスして、緑のCodeをクリックしてDownload ZIPですね。(画像参照)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483769/865d3a28-d851-16b1-9355-6466133b4211.png)

### 使い方

単にターミナルで色の一覧を表示するだけなら

```
$ python -u "path/to/mplcolors.py"
```

とすればよいです。ここで`path/to/mplcolors.py`はcloneもしくは解凍した`mplcolors.py`へのフルパスです。
しかしさすがに面倒なのでエイリアスを設定するとよいでしょう。

#### Windows - コマンドプロンプト

Windowsのコマンドプロンプトの場合はdoskeyを用います。
私の場合、ユーザーディレクトリ直下にマクロをまとめたファイルを作って毎回読み込んでもらう設定にしています。

```
// もしマクロ定義ファイルを作成していなければ作成
C:\Users\takeMe>doskey /macros > macro.txt
// 適当なエディタで開く
C:\Users\takeMe>notepad macro.txt
```

作成したmacro.txtに、以下のようなエイリアスを設定します。=などにスペースを挟むとエラーなので注意。
ちなみに`$*`はエイリアスに続く引数全ての意味です。これを書かないと引数が無視されます。

```macro.txt
mplcolors=python -u path\to\mplcolors.py $*
```

コマンドプロンプトを起動したときに`doskey /macrofile=%USERPROFILE%\macros.txt`と打てばエイリアスが登録されます。
しかしながらこれは非常に面倒です。私の場合VSCodeから利用するので、ターミナルのプロファイルの設定で読み込ませています。
`terminal.integrated.profiles.windows`の中に

```json
"cmd-Default": {
			"path": [
				"${env:windir}\\Sysnative\\cmd.exe",
				"${env:windir}\\System32\\cmd.exe"
			],
			"args": [
				"/k",
				"chcp",
				"65001",
				"&",
				"doskey",
				"/macrofile=%USERPROFILE%\\macros.txt"
			],
			"icon": "vm",
			"overrideName": true
		},
```

と登録しています。この中の`"args"`部分の`"/k", "doskey", "/macrofile=%USERPROFILE%\\macros.txt"`が起動オプションでマクロのファイルを読み込む設定になっています。ご自身の環境でもきっとそういった工夫ができるはずなので、調べてみてください。

#### Windows - パワーシェル

パワーシェルの場合は`notepad $PROFILE`などで起動時に読み込まれるファイルを開くことができます。
なおスクリプトの実行許可が必要なため、`Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force`などで実行の許可をしてください。

開いたら、以下のような関数を加筆します。

```Microsoft.PowerShell_profile.ps1
function mplcolors() {
    python -u path\to\mplcolors.py $args
}
```

`$args`はコマンドプロンプトの場合の`$*`と同じようなもの。
※パワーシェルでは引数付きのエイリアスは`Set-Alias`で定義できない模様。

パワーシェルを再起動させると、`mplcolors`で動作すると思います。

#### Linux系統

例によって`~/.bashrc`に加筆します。

```~/.bashrc
alias mplcolors='python /path/to/dir/mplcolors.py'
```

### 表示例

Windows 10 PowerShellでの表示例です。これでいつでも開発中に色の一覧を確認できますね！！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483769/2f91cd8c-0d11-460a-12a6-5b561d0d6d3d.png)

また、カラーバーの表示にも対応しています。いやー便利ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483769/7e22ce5c-9198-3c8c-2e2e-13e9d7d4c73f.png)

また、[私のPull Request](https://github.com/AstroBarker/mplcolors/pull/1)では検索機能を実装しました。 ~~もしマージされれば検索機能が追加されます！~~ マージされました！
![](https://user-images.githubusercontent.com/68532606/141253021-8798e795-f544-4e3b-88d5-aec86a411716.png)
![](https://user-images.githubusercontent.com/68532606/141253070-64205aa4-242f-47e4-8560-089c00ec4ff1.png)

いつの間にか補色検索が実装されてました。

![スクリーンショット 2022-04-20 171107.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483769/49a96c03-13ee-e962-600d-56aeff5f9dbc.png)

上の例では名前で検索しましたが、`mplcolors -c "12ab84"`のように#を除いたカラーコードでも検索できるようです。

## まとめ

これを導入すれば、色の検索に時間を割く必要がなくなりますね！
是非導入を検討してみてください。

## 参考

- [doskey を使ってコマンドプロンプト用のマクロを登録する](https://maku77.github.io/windows/settings/doskey.html)
- [コマンドに対してマクロ(エイリアス)を設定する(DOSKEY)#マクロに登録するコマンドでリダイレクトやパイプなどの特殊な文字を使用する](https://www.javadrive.jp/command/command/index2.html#section5)
- [PowerShell に Alias を登録する](http://www.vwnet.jp/windows/PowerShell/2020100601/PsAlias.htm)
- [PowerShellで引数を含めエイリアスとして登録する方法](https://qiita.com/ikanamazu/items/5f29e09b80849a4efa58)
- [【Linux】エイリアスの設定方法](https://qiita.com/_ydah/items/18d242b632e5486fe912)

- [VSCodeのターミナル/プロファイルの設定の詳細](https://qiita.com/take_me/items/47f192a126d75a9264a9)