YutaKa Notebook | Python徹底図解ブログ!

Python の文法やモジュール、Python関連のAPIについて画像・ソースコード付きで徹底解説!

【完全保存版】matplotlib pyplot徹底解説 | pyplotの基本操作を総まとめ!

matplotlib.pyplotモジュールを使用してグラフを作成する方法をまとめています。

matplotlibには2つのグラフ作成方針があります。

  • pyplotモジュールを使用
  • グラフ、グラフ要素のインスタンスを生成

インスタンスを生成すると詳細設定が可能ですが、グラフ作成が複雑になってしまいます。

一方、pyplotではインスタンス生成をあまり意識する必要がありません。

そのため、手軽に手早く簡単にグラフ作成することが可能です!

今回はpyplotモジュールでグラフを作成する方法を解説します。

matplotlib.pyplotモジュールの読み込み

pyplotpltという名前でインポートするのが慣例です。

import matplotlib.pyplot as plt

pyplot

  • グラフを作成
  • グラフのスタイル変更
  • タイトルや軸の設定

などを行う場合には、基本的に対応するplt.XXX()という関数を使用していきます。

この記事では重要な関数を網羅しています!

【基本】グラフの作成

pyplotの最も基本的なグラフ作成方法はplot()関数を使用する方法です。

  • pyplot.plot(x, y)

2つのデータセット(x, y)の折れ線グラフを作成することができます。

線の代わりにマーカーを使用すると、簡単な散布図を作成することもできます。

グラフ作成の基本手順:pyplot.plot(x, y)

基本的な手順は次の通りです:

簡単な例として[-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()の引数によって、凡例の位置を調整することができます。

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の記事を書いていますのでぜひご参考に!

Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。

気楽にツイートしているので、気軽にフォローしてください!