「Matplotlibのできれいなグラフを書きたいけど設定方法がわからない」と思っている人向けの記事です。
この記事を読めば、思い通りに綺麗なグラフをMatplotlibで作れるようになります。
Pythonでグラフを書くときはMatplotlibを使用する人が多いと思います。
Matplotlibはとても便利なのですが、デフォルトスタイルのままだと少々格好悪いです。
人に見せるときは、背景の色やフォントの種類、軸の太さや余白などのグラフのスタイル設定をして、格好良いグラフを作成をしたほうが良いです。
そこで、今回はMatplotlibで綺麗なグラフを作るための設定方法を紹介したいとおもいます。
きれないグラフを作成するために、グラフ毎に設定を書くのはかなり面倒です。しかし、今回紹介する方法を使えば、グラフ毎に設定を書き込む必要もなくなります。
ちなみに、ある程度Matplotlibに関するまとまった情報が欲しいと思った方は、書籍を買ったほうが良いです。ネットだとどうしても断片的になってしまいますので、1冊はリファレンス用の書籍を持っていたほうが良いでしょう。私のオススメは以下の3冊です。
2通りのスタイル調整方法
スタイル調整の方法は2通りあります。
- プロット用のスクリプトファイル中で設定用コマンド(rcParams)を使用してスタイルを調整する方法
- 独自の設定ファイルを作成して、作図の際にその設定ファイルを呼び出す方法
上記の方法を使って、下の図のスタイル調整していきます。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 100)
y1 = x**2
y2 = x**1.5
plt.minorticks_on()
plt.plot(x, y1)
plt.plot(x, y2)
plt.xlabel("X")
plt.ylabel("Y")
plt.tight_layout()
plt.show()

rcParamsを使用する方法
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["xtick.direction"] = "in" #X軸の目盛の向き
plt.rcParams["ytick.direction"] = "in" #Y軸の目盛の向き
plt.rcParams["xtick.major.width"] = 1.5 #X軸の主目盛の太さ
plt.rcParams["ytick.major.width"] = 1.5 #Y軸の主目盛の太さ
plt.rcParams["xtick.minor.width"] = 1.2 #X軸の副目盛の太さ
plt.rcParams["ytick.minor.width"] = 1.2 #Y軸の副目盛の太さ
plt.rcParams["xtick.major.size"] = 4.5 #X軸の主目盛の長さ
plt.rcParams["ytick.major.size"] = 4.5 #Y軸の主目盛の長さ
plt.rcParams["xtick.minor.size"] = 3.0 #X軸の副目盛の長さ
plt.rcParams["ytick.minor.size"] = 3.0 #Y軸の副目盛の長さ
plt.rcParams["xtick.labelsize"] = 20.0 #X軸の目盛りラベルのフォントサイズ
plt.rcParams["ytick.labelsize"] = 20.0 #Y軸の目盛ラベルのフォントサイズ
plt.rcParams["xtick.major.pad"] = 5 #X軸と目盛ラベルの間隔(単位はポイント)
plt.rcParams["ytick.major.pad"] = 5 #Y軸と目盛ラベルの間隔(単位はポイント)
plt.rcParams["axes.labelsize"] = 20 #図のフォントラベルサイズ
plt.rcParams["axes.linewidth"] = 1.5 #図の枠線の太さ
plt.rcParams["axes.labelpad"] = 6 #軸と軸ラベルの間隔
x = np.arange(1, 100)
y1 = x**2
y2 = x**1.5
plt.minorticks_on()
plt.plot(x, y1)
plt.plot(x, y2)
plt.xlabel("X")
plt.ylabel("Y")
plt.tight_layout()
plt.show()

最初の図とは随分違った概観になりました。
rcParamsで設定可能な項目を知りたければ、matplotlibのデフォルト設定ファイルmatplotlibrcを参照しましょう。matplotlibrcの置き場所は
import matplotlib as mpl
mpl.matplotlib_fname()
で確認出来ます。上のコマンドは、現在使用しているスタイルの設定ファイルの置き場所を表示します。matplotlibを使用する際に設定ファイルを指定しない場合、matplotlibrcというファイルが自動的に読み込まれます。その為、上記コマンドでmatplotlibrcの場所が表示されます。
独自の設定ファイルを使用する方法
まず、独自の設定ファイルを配置する場所を確認しましょう。下記を実行して表示されるディレクトリが設定ファイルの置き場です。
import matplotlib as mpl
mpl.get_configdir()
大抵の場合 macでは ~/.matplotlib、UbunutuなどのLinuxでは~/.config/matplotlibとなると思います。以降は、matplotlibrcは~/.matplotlibにあるものとして話を進めます。
次に、mpl.matplotlib_fname()で表示された場所から、matplotlibrcを~/.matplotlibにコピーします。
最後に、~/.matplotlib/matplotlibrcを編集しましょう。
このようにすると、編集したmatplotlibrcが自動で読み込まれ、独自のスタイルがデフォルトで使用されるようになります。
matplotlibrcには、下記の様に設定項目が記載されています。設定したい項目のコメントアウトを外して、所望の値を記載すればOKです。
#### AXES
## default face and edge color, default tick sizes,
## default fontsizes for ticklabels, and so on. See
## http://matplotlib.org/api/axes_api.html#module-matplotlib.axes
#axes.facecolor : white ## axes background color
axes.edgecolor : black ## axes edge color
axes.linewidth : 0.8 ## edge linewidth
#axes.grid : False ## display grid or not
#axes.grid.axis : both ## which axis the grid should apply to
#axes.grid.which : major ## gridlines at major, minor or both ticks
#axes.titlesize : large ## fontsize of the axes title
#axes.titleweight : normal ## font weight of title
#axes.titlepad : 6.0 ## pad between axes and title in points
#axes.labelsize : medium ## fontsize of the x any y labels
#axes.labelpad : 4.0 ## space between label and axis
#axes.labelweight : normal ## weight of the x and y labels
#axes.labelcolor : black
#axes.axisbelow : line ## draw axis gridlines and ticks below
## patches (True); above patches but below
## lines ('line'); or above all (False)
もし、独自のスタイルを複数作成し、それらを適宜使い分けたい場合は、下記のようにします。
- ~/.matplotlibにstylelibディレクトを作成
- matplotlibrcをコピーし、xxx.mplstyleというファイル名に変更((xxxは適当に好きな名前を記入)。これを~/.matplotlib/stylelibに保存
- plt.style.use(“xxx”)をソースコード中に記載し、スタイルを適用。
例えば、mystyle.mplstyleを~/.matplotlib/stylelibに配置した場合は
import matplotlib.pyplot as plt
plt.style.use("mystyle")
とすれば、mystyle.mplstyleに記載した内容がグラフに反映されます。
適用可能なスタイルを確認したければ、下記を実行すれば確認出来ます。
import matplotlib as plt
plt.style.available
#['seaborn-dark', 'seaborn-darkgrid', 'seaborn-ticks', 'fivethirtyeight',
#'seaborn-whitegrid', 'classic', '_classic_test', 'fast', 'seaborn-talk',
#'seaborn-dark-palette', 'seaborn-bright', 'seaborn-pastel', 'grayscale',
#'seaborn-notebook', 'ggplot', 'seaborn-colorblind', 'seaborn-muted',
#'seaborn', 'Solarize_Light2', 'seaborn-paper', 'bmh', 'tableau-colorblind10',
#'seaborn-white', 'dark_background', 'seaborn-poster', 'seaborn-deep', 'mystyle']
maptplotlibで用意されているseaborn-darkなどのスタイルに加え、先程のmystyleが追加されている事がわかります。
このように、スタイルに名前を付け保存しておけば、論文用、プレゼン用・・・と用途によってスタイルを切り替える事が容易になります。