YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

matplotlib:一つのグラフに複数プロット

今回はmatplotlibで、同一グラフ内に2系列以上のデータをプロットする方法を紹介します。

参考URL:Matplotlib: Python plotting — Matplotlib 3.1.2 documentation

 

はじめに

matplotlibでは、作成したいグラフに応じて使用するモジュールを選択します。

二次元の散布図や折れ線グラフを作成したい際には、matplotlib.pyplotを使用します。

pyplotの基本的な使用方法については、こちらの記事もご覧ください

2つの曲線を1つのグラフ内にプロット

次の2つの方法を紹介します。

  1. plot()メソッドを繰り返す
  2. plot()メソッドの引数を増やす

どちらもシンプルなので、一度覚えてしまえば後は楽々です!

次の sin()cos() 関数を例に各方法の例を紹介したいと思います。

import numpy as np
x = np.linspace(0, 3np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

横軸は [0, 3π] を100等分した数列 x です。 縦軸は y1 = sin(x)y2 = cos(x) とします。

ここでも使用していますは、matplotlibでグラフを描く際には、np.linspace()でx軸の数列を作成すると効率が良いです!

① plot() メソッドを繰り返す

次のようにplot()メソッドを繰り返すだけで、1つのグラフ内に曲線が追加されます。

plt.plot(x, y1)
plt.plot(x, y2)

② plot()メソッドの引数を増やす

2つ以上の曲線のデータを一度にplot()に渡すことも可能です。

plt.plot(x, y, x, z)

'1系列目のx', '1系列目のy', '2系列目のx', '2系列目のy', …と指定しています。

ここで注意するのは

  • 1系列目と2系列目で x が共通でも、それぞれ個別に指定します。
  • 2系列目の x を省略するとエラーです。
plt.plot(x, y1, y2)

②+α 各グラフのフォーマットを変更する

fmt引数を指定することで、各プロットのフォーマットを個別に指定できます。

plt.plot(x, y1, fmt1, x, y2, fmt2)

具体例として、

  • sin() カーブを青色の破線(fmt1 = b--)にして、
  • cos() カーブを赤色の丸プロット(fmt2 = ro)に指定してみます。
plt.plot(x, y1, b--, x, y2, ro)

同様に、gで緑にしたり、^でプロットを▲にしたりもできます。

fmt引数はグラフの見た目の変更に便利なので、基本操作は覚えておいて損はないです。

まとめ

同一グラフ内に2系列以上のデータをプロットする方法を紹介しました。

  1. plot()メソッドを繰り返す
  2. plot()メソッドの引数を増やす

同様の方法で、3系列目以降も追加可!です!

matplotlibおススメ記事&本まとめ

同一グラフ内ではなく、縦横に別のグラフを並べて表示するには、subplot()を使用します。

matplotlib:subplot使い方まとめ

グラフ内にテキスト(コメントや注釈など)を挿入するには、text()を使用します。

matplotlib:pyplot.text()よく使うもの徹底解説!

私は公式ドキュメントを読んで使用方法を覚えましたが、公式は英語でわかりにくい部分もややあります…。

日本語の参考書もいくつか呼んだのですが、個人的には次の本が逆引き辞書のようになっていて便利だと思います。