matplotlibの基本について紹介していきます。
pythonの基本操作を行えることを想定しています。
githubにもソースコードをあげています。
https://github.com/tocom242242/aifx_blog_codes/blob/master/matplotlib_samples/matplotlib_basic.ipynb
figureとax
matplotlibの基本の基本であるfigureとaxを見てみます。
まず、単純なグラフを表示してみましょう。
import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x = [0,1,2] y = [0,1,2] ax.plot(x,y) plt.show()
このグラフの中でfigureとaxは下の図のようになります。
figureの中にax(グラフ本体)があるような感じです。
複数のグラフを同じfigure内に表示する
次に、同じfigure内に複数のグラフ(ax)を表示してみます。
import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(221) # 2行2列の1番目のax(左上) ax2 = fig.add_subplot(222) # 2行2列の2番目のax(右上) ax3 = fig.add_subplot(223) # 2行2列の3番目のax(左下) ax4 = fig.add_subplot(224) # 2行2列の4番目のax(右下) plt.show()
上記のコードで以下のようなグラフをプロットします。
各axは以下のようになります。
subplotsメソッドでfigとaxを同時に作る
subplotsメソッドを使えば、figとaxを同時に作ることができます。
fig, ax = plt.subplots()
さらに引数に(行、列)を与えれば、
fig, axes = plt.subplots(3, 1)
スタイルを変更する
plt.style.use()を使うことによってグラフのスタイルを変更できます。
例えば、
>>> plt.style.use("bmh") # スタイルの変更 >>> x = [0, 1, 2] >>> y = [0, 1, 2] >>> plt.plot(x, y)
ちなみに使えるスタイルはplt.style.availableで確認することができます。
>>> plt.style.available ['seaborn-pastel', 'Solarize_Light2', 'seaborn-white', 'dark_background', 'fivethirtyeight', 'seaborn-paper', 'seaborn-deep', 'tableau-colorblind10', 'seaborn', 'seaborn-talk', 'seaborn-muted', 'seaborn-bright', 'seaborn-darkgrid', 'seaborn-dark-palette', 'seaborn-ticks', 'fast', 'bmh', 'seaborn-whitegrid', 'seaborn-colorblind', 'grayscale', 'seaborn-dark', 'seaborn-notebook', '_classic_test', 'classic', 'seaborn-poster', 'ggplot']
複数のグラフを表示する
折れ線を複数表示したいと思います。
やり方は簡単で、単純に二回plotを呼ぶだけです。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> x = np.array([0, 1, 2]) >>> y = np.array([0, 1, 2]) >>> y2 = y*2 >>> plt.plot(x, y) >>> plt.plot(x, y2) >>> plt.show()
もう1つの方法としては、plot(x1, y1, x2, x2,…)といった形で複数のグラフを与える方法です。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> x = np.array([0, 1, 2]) >>> y = np.array([0, 1, 2]) >>> y2 = y*2 >>> plt.plot(x, y, x, y2) # ここ >>> plt.show()
figureオブジェクトのパラメータについて
figのパラメータは次のように設定できます。
import matplotlib.pyplot as plt fig = plt.figure( figsize=(5, 5), # figのサイズ dpi=100, # 解像度 facecolor="r", # 塗りつぶしの色(枠内) edgecolor="g", # 枠線の色 linewidth=10, # 枠線の太さ frameon=True, # 枠線の表示 # tight_layout=False, constrained_layout=True # layoutの調整(tight_layoutより柔軟に対応) ) ax = fig.add_subplot(111) plt.show()
保存する時には、savefigにも同様の設定を記述する必要があります。単純にsavefigを実行すると設定が解除されてしまいます。
# 保存するときにも同じような設定をしないと設定が消えてしまう。 plt.savefig("sample.png", figsize=(5, 5), dpi=100, facecolor="r", edgecolor="g", linewidth=10, frameon=True, tight_layout=False, constrained_layout=False)
サブプロット間の余白の調整
例えば、以下のようにグラフを生成すると
>>> fig = plt.figure(figsize=(3,3)) >>> ax1 = fig.add_subplot(221) >>> ax2 = fig.add_subplot(222) >>> ax3 = fig.add_subplot(223) >>> ax4 = fig.add_subplot(224)
とグラフが重なってしまいます。
ここで、subplots_adjustメソッドを用いる、余白の設定ができます。
>>> fig.subplots_adjust(wspace=0.5, hspace=0.5)
ここで、wspaceはサブプロット間の横幅の設定、hspaceは縦幅の設定になります。