matplotlibをダークテーマにしたい


matplotlibはデフォルトでは下の画像のように背景が真っ白で, 長時間見ていると目が痛くなるから別の色に変更したい. しかし, スタイルシートをわざわざ自作するのも億劫である. 調べてみるとプリセットのスタイルシートが使えるとのことなので, 使い方を簡単に書き留めておこうと思う.

import

import matplotlib.pyplot as plt

スタイルシート一覧

plt.style.available

利用可能なスタイルシート一覧を配列として取得できる.
配列の中身は以下の通り.

['bmh',
 'classic',
 'dark_background',
 'fast',
 'fivethirtyeight',
 'ggplot',
 'grayscale',
 'seaborn-bright',
 'seaborn-colorblind',
 'seaborn-dark-palette',
 'seaborn-dark',
 'seaborn-darkgrid',
 'seaborn-deep',
 'seaborn-muted',
 'seaborn-notebook',
 'seaborn-paper',
 'seaborn-pastel',
 'seaborn-poster',
 'seaborn-talk',
 'seaborn-ticks',
 'seaborn-white',
 'seaborn-whitegrid',
 'seaborn',
 'Solarize_Light2',
 'tableau-colorblind10',
 '_classic_test']

黒い方がかっこいいので, dark_backgroundあたりが良さそう.

スタイルを適用する

plt.style.use('dark_background')

最初にこの一行でスタイルを適用したら, 後はいつも通りにグラフを描いたり画像を表示したりするだけ.

サインカーブを描いてみる

こういうときはサインカーブと相場は決まっているので, さっそく描いて確かめてみる.

import numpy as np

x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)

良いと思う.

がしかし, 少し黒すぎる気もする.
この画像のファイル名がdark_sin.pngで罪深すぎるのも若干気になる.

簡単な自作スタイルシート

自作のスタイルシートは作らないつもりだったが, 少しだけいじってみる.

スタイルシートが入っているフォルダはpythonのフォルダからLib/site-packages/matplotlib/mpl-data/stylelib/と下っていけば見つかる. その中にdark_background.mplstyleというファイルがあるので, それを開く. 内容は以下の通り.

dark_background.mplstyle
# Set black background default line colors to white.

lines.color: white
patch.edgecolor: white

text.color: white

axes.facecolor: black
axes.edgecolor: white
axes.labelcolor: white
axes.prop_cycle: cycler('color', ['8dd3c7', 'feffb3', 'bfbbd9', 'fa8174', '81b1d2', 'fdb462', 'b3de69', 'bc82bd', 'ccebc4', 'ffed6f'])

xtick.color: white
ytick.color: white

grid.color: white

figure.facecolor: black
figure.edgecolor: black

savefig.facecolor: black
savefig.edgecolor: black


見ての通り, それぞれの項目に色が割り振られてあるだけで, それほど難しくはない.
このファイルに登場するすべてのblackを別のもう少しマイルドな黒に置換すれば, 求めるスタイルシートになりそうだ.
カラーコード一覧を見て適当な色を選ぶ.
2e2e2eあたりがちょうど良さそうなので, このファイルをコピーし, すべてのblack2e2e2eに置換したものをgray_background.mplstyleなどのファイル名で同じフォルダに保存する.

gray_background.mplstyle
# Set 2e2e2e background default line colors to white.

lines.color: white
patch.edgecolor: white

text.color: white

axes.facecolor: 2e2e2e
axes.edgecolor: white
axes.labelcolor: white
axes.prop_cycle: cycler('color', ['8dd3c7', 'feffb3', 'bfbbd9', 'fa8174', '81b1d2', 'fdb462', 'b3de69', 'bc82bd', 'ccebc4', 'ffed6f'])

xtick.color: white
ytick.color: white

grid.color: white

figure.facecolor: 2e2e2e
figure.edgecolor: 2e2e2e

savefig.facecolor: 2e2e2e
savefig.edgecolor: 2e2e2e


自作のスタイルを適用する

シェルを開きなおし, plt.style.availableで確認すると, gray_backgroundが新たに追加されている.
例のごとくサインカーブをプロットしてみる.

import numpy as np

x = np.linspace(0, 2*np.pi, 200)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)

これでだいぶグレーになった.

このように自作スタイルを適用したい場合も, 基本的にはプリセットのスタイルシートを参考に自分好みにマイナーチェンジしていけば, それほど労力はかからないだろう.