note.nkmk.me

Matplotlibのグラフのスタイルを設定ファイル・スタイルシートで変更

Date: 2017-11-17 / tags: Python, Matplotlib
スポンサーリンク

Matplotlibの設定ファイルmatplotlibrcの使い方

Matplotlibのデフォルトのグラフのスタイル(線やグリッドの種類・太さ・色など)はmatplotlibrcという設定ファイルで規定される。

常に適用したい設定はmatplotlibrcに記述する。

matplotlibrcを置く場所

matplotlibrcの置き場所は3箇所ある。以下の順番で検索され、見つかり次第そのファイルの設定が適用される。

  1. プロジェクトのカレントディレクトリ(作業フォルダ)
    • そのプロジェクトにだけ設定を適用したい場合、ここに置く
  2. Matplotlib設定保存用ディレクトリ
    • 各OSでの場所は以下の通り(環境によっては違う場合もある)
      • Linuxの場合、.config/matplotlib/
      • Macの場合、/Users/<user-name>/.matplotlib/
      • Windowsの場合、C:\\Documents and Settings\\<user-name>\\.matplotlib
  3. Matplotlibのインストールディレクトリ直下のmpl-data

Matplotlib設定保存用ディレクトリはメソッドget_configdir()で確認できる。

import matplotlib as mpl

print(mpl.get_configdir())

現在適用されているmatplotlibrcの確認方法

実際にどのmatplotlibrcが適用されているかは、メソッドmatplotlib_fname()で確認できる。プロジェクトのカレントディレクトリやMatplotlib設定保存用ディレクトリにmatplotlibrcを置いたつもりなのにスタイルが変わらない場合は、このメソッドで確認するといい。

print(mpl.matplotlib_fname())

また、matplotlibrcはmatplotlibをimportするタイミングで読み込まれるため、Jupyter Notebookの場合、途中でmatplotlibrcを変更してもスタイルは変わらない。Kernel > Restart & Clear Outputで再起動して最初から再実行するとOK。

matplotlibrcの書き方

Matplotlibのインストールディレクトリ直下のmpl-dataにあるmatplotlibrcに設定項目とその書き方がコメントで列挙されている。

線についての設定は以下のようになっている。

### LINES
# See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more
# information on line properties.
#lines.linewidth   : 1.5     # line width in points
#lines.linestyle   : -       # solid line
#lines.color       : C0      # has no affect on plot(); see axes.prop_cycle
#lines.marker      : None    # the default marker
#lines.markeredgewidth  : 1.0     # the line width around the marker symbol
#lines.markersize  : 6            # markersize, in points
#lines.dash_joinstyle : miter        # miter|round|bevel
#lines.dash_capstyle : butt          # butt|round|projecting
#lines.solid_joinstyle : miter       # miter|round|bevel
#lines.solid_capstyle : projecting   # butt|round|projecting
#lines.antialiased : True         # render lines in antialiased (no jaggies)

# The three standard dash patterns.  These are scaled by the linewidth.
#lines.dashed_pattern : 2.8, 1.2
#lines.dashdot_pattern : 4.8, 1.2, 0.8, 1.2
#lines.dotted_pattern : 1.1, 1.1
#lines.scale_dashes : True

ここから必要な部分を抜き出して設定すればよい。

例えば、線の太さ・種類・色を変えたい場合は、以下のように設定する。なお、デフォルトのmatplotlibrcのコメントにあるように、lines.colorplot()には影響しないので、plot()での線の色を変えたい場合はaxes.prop_cycleで設定する。

lines.linewidth   : 3.0
lines.linestyle   : --    # 破線
axes.prop_cycle   : cycler('color', ['green'])
axes.grid         : True

スタイルシートの使い方

Matplotlib1.4以降はスタイルシートファイルを使ってグラフのスタイルを簡単に変更することができる。

スタイルシートの適用はコード内で指定する必要があるので、常に適用したい設定は前述のmatplotlibrcに記述する。

利用できるスタイルシートの確認

plt.style.availableで現在利用できるスタイルシートの一覧を確認できる。seabornをインストールしていると、seabornのスタイルシートファイルも追加されている。

import matplotlib.pyplot as plt

print(plt.style.available)
# ['seaborn-dark', 'seaborn-darkgrid', 'seaborn-ticks', 'fivethirtyeight',
#  'seaborn-whitegrid', 'classic', 'seaborn-talk', 'seaborn-dark-palette',
#  'seaborn-bright', 'seaborn-pastel', 'grayscale', 'seaborn-notebook',
#  'ggplot', 'seaborn-colorblind', 'seaborn-muted', 'seaborn', 'seaborn-paper',
#  'bmh', 'seaborn-white', 'dark_background', 'seaborn-poster', 'seaborn-deep']

スタイルシートの適用

plt.style.use('ggplot')のようにスタイルシートの名前を指定するとそのスタイルが適用される。

スタイルシートを何も指定しない、デフォルトのスタイルがこれ。

x = np.arange(0, 2 * np.pi, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.savefig('data/dst/matplotlib_style_default.png')
plt.show()

Matplotlib default style

'ggplot'を適用するとこんな感じ。

plt.style.use('ggplot')
plt.plot(x, y)
plt.savefig('data/dst/matplotlib_style_ggplot.png')
plt.show()

Matplotlib ggplot style

一時的に適用

withブロックでplt.style.context('ggplot')のようにして指定すると、スタイルシートを一時的に適用することができる。この場合、withブロックの外には影響を及ぼさない。

with plt.style.context('dark_background'):
    plt.plot(x, y)
    plt.savefig('data/dst/matplotlib_style_dark_background.png')
    plt.show()

Matplotlib dark_background style

複数のスタイルシートを組み合わせて適用

複数のスタイルシートをリストで指定することもできる。設定が競合した場合は後に指定したほうで上書きされる。

with plt.style.context(['ggplot', 'dark_background']):
    plt.plot(x, y)
    plt.savefig('data/dst/matplotlib_style_ggplot_dark_background.png')
    plt.show()

Matplotlib multi style

スタイルシートの自作

スタイルシートを独自に作成することもできる。書き方は前述のmatplotlibrcと同じ。

前述のMatplotlib設定保存用ディレクトリにstylelibというディレクトリを作って、作成したファイルを<style-name>.mplstyleという名前で保存すると、plt.style.use('<style-name>')で使用可能。

Matplotlib設定保存用ディレクトリはメソッドmpl.get_configdir()で確認できる。

import matplotlib as mpl

print(mpl.get_configdir())

なお、デフォルトのスタイルシートファイルはMatplotlibのインストールディレクトリ直下のmpl-data/stylelibディレクトリに格納されている。書き方の参考になる。

自作のスタイルシートは、任意の場所に作成してパスで指定することもできる。

以下のようなファイルを作成。

lines.linewidth   : 3.0
lines.linestyle   : --    # 破線
axes.prop_cycle   : cycler('color', ['green'])
axes.grid         : True

パスで指定して適用。

with plt.style.context('data/src/test.mplstyle'):
    plt.plot(x, y)
    plt.savefig('data/dst/matplotlib_style_test.png')
    plt.show()

Matplotlib mystyle style

例えば、複数のスタイルシートを指定する際に自作のファイルを用いれば、既存のスタイルシートの一部だけ上書きして変更することができる。便利。

with plt.style.context(['ggplot', 'data/src/test.mplstyle']):
    plt.plot(x, y)
    plt.savefig('data/dst/matplotlib_style_test_ggplot.png')
    plt.show()

Matplotlib mystyle multi style

スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事