matplotlib.pyplot
モジュールを使用してグラフを作成する方法をまとめています。
matplotlib
には2つのグラフ作成方針があります。
pyplot
モジュールを使用- グラフ、グラフ要素のインスタンスを生成
インスタンスを生成すると詳細設定が可能ですが、グラフ作成が複雑になってしまいます。
一方、pyplot
ではインスタンス生成をあまり意識する必要がありません。
そのため、手軽に手早く簡単にグラフ作成することが可能です!
今回はpyplot
モジュールでグラフを作成する方法を解説します。
matplotlib.pyplotモジュールの読み込み
pyplot
はplt
という名前でインポートするのが慣例です。
import matplotlib.pyplot as plt
pyplot
で
- グラフを作成
- グラフのスタイル変更
- タイトルや軸の設定
などを行う場合には、基本的に対応するplt.XXX()
という関数を使用していきます。
この記事では重要な関数を網羅しています!
【基本】グラフの作成
pyplot
の最も基本的なグラフ作成方法はplot()
関数を使用する方法です。
pyplot.plot(x, y)
2つのデータセット(x, y)
の折れ線グラフを作成することができます。
線の代わりにマーカーを使用すると、簡単な散布図を作成することもできます。
グラフ作成の基本手順:pyplot.plot(x, y)
基本的な手順は次の通りです:
- プロット範囲の
x
を用意(リスト
やndarray
) x
に対応するy
の値を用意(リスト
やndarray
)pyplot.plot(x, y)
でプロット作成plt.show()
で画面に表示
簡単な例として[-5, 5]
の範囲でy = x**3
のグラフを作成します。
import numpy as np
import matplotlib.pyplot as plt
# プロット範囲のxを用意
x = np.arange(-5,6)
# x = array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5])
# xに対応するyの値を用意
y = x**3
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
# plt.show()で画面に表示
plt.show()
簡単にグラフを作成することができました。
グラフは(x, y)
のデータ点をもとに作成されます。
そのため、上の例のようにx
の間隔が粗いとグラフがカクカクしてしまいます。
x
の間隔を細かくとって、滑らかなグラフを作成します。
# プロット範囲のxを用意
x = np.linspace(-5,5) # xを-5から5で50等分した配列を生成
# x = array([-5, -4.79591837 -4.59183673,...,4.79591837 5.])
# xに対応するyの値を用意
y = x**3
# array([-1.25000000e+02, -1.10310117e+02,...,1.10310117e+02, 1.25000000e+02])
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
# plt.show()で画面に表示
plt.show()
np.linspace(s, n)
は、s
からn
までを50等分割した配列を簡単に作成できるので、pyplot()
との相性がとても良いです。
グラフのスタイル変更:pyplot.plot(x, y, fmt)
次にグラフのスタイル変更方法を紹介します。
最も手軽な方法は、第三引数としてフォーマット文字列fmt
を使用する方法です。
fmt = '[marker][line][color]'
pyplot(x, y, fmt)
各要素に対応する既定の文字を入力することで、
[marker]
:プロットの種類[line]
:線の種類[color]
:グラフの色
を簡単に設定できます(省略した要素には、デフォルト値が使用されます。)
簡単な例として、赤い破線、青い星型プロットのグラフを作成してみます。
# プロット範囲のxを用意
x1 = np.linspace(-5,5)
x2 = np.linspace(-4,6)
# xに対応するyの値を用意
y1 = x1**2
y2 = (x2-1)**2
# pyplot.plot(x, y)でプロット作成
plt.plot(x1, y1, "r--")
plt.plot(x2, y2, "b*")
# plt.show()で画面に表示
plt.show()
簡単にスタイル変更ができましたね。
以下で、fmtに設定できる主要なプロットの種類、線の種類、色の種類を紹介します。
プロットの種類:[marker]
'.'
⇒ 丸(中)','
⇒ 丸(小)'o'
⇒ 丸(大)'v'
⇒ 下向き三角'^'
⇒ 上向き三角's'
⇒ 四角'p'
⇒ 五角形'*'
⇒ 星型'D'
⇒ ひし形'd'
⇒ ひし形(細)
# マーカーの設定
marker_list =['.', ',', 'o', 'v', '^', '<', '>', 's', 'p', '*', 'D', 'd']
for i, marker in enumerate(marker_list):
x = np.linspace(0, 2*np.pi, num=10)
y = np.sin(x)+ i
plt.plot(x, y, marker,label=marker)
# 凡例の出力
plt.legend(marker_list,bbox_to_anchor=(1, 1))
plt.show()
線の種類:[line]
'-'
⇒ 実線'--'
⇒ 破線'-.'
⇒ 一点鎖線':'
⇒ 点線
# 線の設定
line_list =['-', '--', '-.', ':']
for i, line in enumerate(line_list):
x = np.linspace(0, 2*np.pi)
y = np.sin(x)+ i
plt.plot(x, y, line,label=line)
# 凡例の出力
plt.legend(line_list,bbox_to_anchor=(1, 1))
plt.show()
色の種類:[color]
'b'
⇒ 青'g'
⇒ 緑'r'
⇒ 赤'c'
⇒ シアン'm'
⇒ マゼンタ'y'
⇒ 黄色'k'
⇒ 黒'w'
⇒ 白
color_list =['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']
for i, color in enumerate(color_list):
x = np.linspace(0, 2*np.pi)
y = np.sin(x)+ i
plt.plot(x, y, color,label=line)
# 凡例の出力
plt.legend(color_list,bbox_to_anchor=(1, 1))
plt.show()
グラフ要素の追加・変更
グラフの主要な要素の追加・変更方法について解説します。
- グラフタイトル、軸ラベルの追加:plt.title(), plt.xlabel(), plt.ylabel()
- 軸の範囲の変更:plt.xlim(), plt.ylim()
- 凡例の追加:plt.legend()
グラフタイトル、軸ラベルの追加:plt.title(), plt.xlabel(), plt.ylabel()
グラフタイトル、軸名はそれぞれ関数で設定します。
- グラフタイトル:
plt.title("title name")
- x軸ラベル:
plt.xlabel("label name of x axis")
- y軸ラベル:
plt.ylabel("label name of y axis")
次のように設定されます。
# プロット範囲のxを用意
x = np.linspace(-5,5)
# xに対応するyの値を用意
y = x**3
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
plt.title("cubic curve")
plt.xlabel("label name of x axis")
plt.ylabel("label name of y axis")
# plt.show()で画面に表示
plt.show()
軸の範囲の変更:plt.xlim(), plt.ylim()
軸の範囲は次の関数で設定します。
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
次の例で、x軸とy軸の範囲を設定してみます。
# プロット範囲のxを用意
x = np.linspace(-5,5)
# xに対応するyの値を用意
y = x**3
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
plt.xlim(-2, 2)
plt.ylim(-10,10)
# plt.show()で画面に表示
plt.show()
軸の範囲を変更すると、自動で軸目盛が振りなおされます。
凡例の追加:plt.legend()
凡例を作成するには、次の手順を踏みます。
- プロット時にラベル名指定:
plt.plot(x, y, label="label name")
- 凡例の表示:
plt.legend()
を実行
plt.legend()
を実行すると、label
をもとに凡例が自動生成されます。
次の例では、sinカーブとcosカーブを描いて、凡例を表示しています。
# プロット範囲のx, 対応するyを用意
x = np.linspace(0, 2*np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
# # pyplot.plot(x, y)でプロット作成
plt.plot(x, y1, label="sin curve")
plt.plot(x, y2, label="cos curve")
# 凡例の出力
plt.legend()
# plt.show()で画面に表示
# plt.show()
デフォルトでは凡例の位置は自動で設定されます。
plt.legend()
の引数によって、凡例の位置を調整することができます。
- 右側:
loc = "upper left", bbox_to_anchor=(1, 1)
- 上側:
loc="center", bbox_to_anchor=(0.5, 1.05), ncol=ラベル数
- 参考:Legend guide — Matplotlib 3.3.1 documentation
sinカーブ、cosカーブのグラフを例に凡例の位置を変更してみます。
plt.legend(loc = "upper left", bbox_to_anchor=(1, 1))
plt.show()
plt.legend(loc="center", bbox_to_anchor=(0.5, 1.05), ncol=2)
plt.show()
グラフの保存方法
グラフを保存する場合、plt.savefig()
を使用します
plt.savefig(ファイル名)
:カレントフォルダに保存plt.savefig(保存先のパス)
:指定したフォルダに保存
デフォルトでは、pingファイル形式で保存されます。
【参考】matplotlib.pyplot.savefig — Matplotlib 3.1.2 documentation
pict_name = "01_pyplot"
plt.savefig(pict_name)
# カレントフォルダに01_pyplot.pngファイルが保存される
import os
root = r"C:\Users\YutaKa"
pict_name = "01_pyplot"
plt.savefig(os.path.join(root, pict_name))
# C:\Users\YutaKaに01_pyplot.pngファイルが保存される
おわりに:matplotlib関連記事の紹介
今回は、matplotlib
の基本モジュールpyplot
を使用してグラフを作成する基本的な方法を紹介しました。
これで手軽にグラフを描けるようになったと思います。
次に覚えて頂きたい機能は、subplot
です。
一つの図の中に2つ以上のグラフを並べて表示することができます。
- 折れ線グラフと棒グラフを並べたり
- 異なる2つのデータを比較したり
人の目を惹くグラフを作成できるようになります!
他にもmatplotlib
の記事を書いていますのでぜひご参考に!
- matplotlib | pyplotで基本的なグラフを簡単に作れるようになるには?
- matplotlib | 一つのグラフに複数プロット
- matplotlib | pyplot.text()よく使うもの徹底解説!
Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。
気楽にツイートしているので、気軽にフォローしてください!