YutaKaのPython教室

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

Matplotlib pyplot.plot徹底解説 | 基本操作を総まとめ!

この記事では、matplotlib.pyplotモジュールを使用してグラフを作成する方法をまとめています。

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

  • pyplotモジュールを使用(pltメソッド)
  • グラフ、グラフ要素のオブジェクトを生成(オブジェクト指向)

オブジェクト指向では細かな設定ができますが、コードが複雑になってしまうことも…。

一方、pyplotではオブジェクトを意識せず、手軽に手早く簡単にグラフ作成することができます。

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

  • 【参考】plt.subplots()で始めるオブジェクト指向のグラフ描画は、次の記事で解説しています。
≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数をを図解付きで解説します!
www.yutaka-note.com/entry/matplotlib_subplots
 

pyplotでグラフを描く基本手順

pyplotでグラフを描く基本の流れは次の通りです。

  1. pyplotモジュールのインポート
  2. plt.plot()関数でグラフを描画
  3. 必要に応じて、plt.XXX()関数でグラフ内各要素の追加設定

ある程度複雑なグラフを描くときも、基本はこの流れです。

それぞれの手順を順番に確認していきましょう。

pyplotモジュールの読み込み

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

import matplotlib.pyplot as plt

インポート後は、各操作に応じたplt.XXX()形式の関数を実行して、グラフを描いていきます。

以下では、基本的なplt.XXX()関数について詳しく解説していきます。

基本的なpyplotモジュール関数まとめ

pyplotでグラフ描画する場合は、plt.plot()を中心にplt.XXX()という関数を使用します。

次の表に基本的なplt.XXX()関数をまとめたので、どんな関数があるのかチェックしてみましょう。

グラフ操作 関数名 コメント
グラフ作成 plt.plot(x, y) x: x座標の値をリストなど
y: y座標の値のリストなど
グラフ作成
※簡易スタイル変更あり
plt.plot(x, y, fmt) fmt: 既定文字列で次の要素を指定
  • マーカーの形
  • 線のスタイル
  • グラフの色
タイトル追加 plt.title("タイトル名") グラフ上部に"タイトル名"を表示
軸ラベル追加 plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
x軸, y軸に"ラベル名"をそれぞれ表示
軸の範囲変更 plt.xlim(x軸最小値, x軸最大値)
plt.ylim(y軸最小値, y軸最大値)
x軸, y軸の最大値・最小値を変更
凡例の表示 plt.legend() 凡例を表示
グラフの保存 plt.savefig("保存名") "保存名"で保存
"フォルダ名/保存名"も可能

この表のplt.XXX()関数を覚えれば、ある程度基本的なグラフが描けるようになってきます。

以下では、これらの関数を順番にわかりやすく解説していきます!

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

pyplotの最も基本的な関数が、plt.plot()です。

  • pyplot.plot(x, y)
    • デフォルト:(x, y)に応じた折れ線グラフを出力
    • 設定変更で簡単な散布図にすることも可能

このときx, yは次のように準備します。

引数 内容 例)y = 2*x のグラフの場合
x 各プロットのxの値 Array_like([リスト]やndarrayなど) x=[0, 1, 2, 3, …]
y 各プロットのyの値 Array_like([リスト]やndarrayなど) y=[0, 2, 4, 6, …]

簡単な例として[-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
# y = array([-125,  -64,  -27,   -8,   -1,    0,    1,    8,   27,   64,  125])
 
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
 
# plt.show()で画面に表示(Jupyter Notebookの場合は不要)
plt.show()

次のようなグラフが作成されます。

簡単にグラフを作成することができましたね。

  • 【参考】NumPyndarrayの生成方法については、次の記事で解説しています。
≫【徹底図解】numpy array | リストからndarray作成を徹底解説!
numpyにおける配列ndarrayを生成する関数がarray。①基本的な一次元配列の生成、②リスト内包表記を使用した複雑な配列の生成方法、③多次元配列の生成方法について、サンプルコード付きで徹底解説しました。
www.yutaka-note.com/entry/numpy_array
 

グラフは(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()は、区間を当分割した配列を作成するので、pyplot()との相性が良いです。

詳しくは、次の記事を参考にして下しさい。

≫【徹底図解】NumPy linspace | お手軽!等間隔の数列を作成
NumPyで、等間隔の数列を作るにはどうすればいいの?!そんな疑問にお答えします。等間隔の数列を生成するには、NumPyの関数linspace()を使いましょう!この記事では、linspaceの使い方を、図解・サンプルコード付きで紹介します。類似関数arrangeとの使い分けについても、しっかり解説しています!
www.yutaka-note.com/entry/numpy_linspace
 

複数系列のグラフを描画

複数系列のグラフを作成したい場合は、plt.plot()を繰り返し実行すればOKです。

繰り返した回数だけ、プロットが追加されます。

# プロット範囲のxを用意
x = np.linspace(-5,5)
# x = array([-5, -4.79591837 -4.59183673,...,4.79591837  5.])
 
# xに対応するy, y2の値を用意
y = x**3
y2= -x**3
 
# pyplot.plot(x, y)でプロット作成
plt.plot(x, y)
plt.plot(x, y2)

同じグラフの中にプロットせず、複数のグラフを縦や横に並べる場合は、サブプロットを作成します。

サブプロットの作成方法については、次の記事で詳しく解説しています。

≫Matplotlib plt.subplotの使い方徹底図解!|一つの図に複数グラフを描く
Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?plt.subplot()でグラフを並べられるらしいけど、使い方がよくわからない!という方のために、「plt.subplot()の基本的な使い方」を画像付きで解説していきます!plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう!
www.yutaka-note.com/entry/2020/01/02/232925
 

グラフのスタイル変更:plt.plot(x, y, fmt)

次にグラフのスタイル変更方法を紹介します。

最も手軽なスタイル変更方法は、第三引数としてフォーマット文字列fmtを使用する方法です。

  • pyplot(x, y, fmt)
  • fmt = '[marker][line][color]'

[marker][line][color]には、それぞれ設定内容に応じた文字を入力します。

fmt内の内容 設定内容 設定例
[marker] プロットの種類
  • 'o' ⇒ 丸(デフォルト)
  • '^' ⇒ 三角
  • '*' ⇒ 星型
[line] 線の種類
  • '-' ⇒ 実線(デフォルト)
  • ':' ⇒ 点線
  • '--' ⇒ 破線
[color] グラフの色
  • 'b' ⇒ 青
  • 'g' ⇒ 緑
  • 'r' ⇒ 赤

簡単な例として、赤破線(fmt=r--)、青星型プロット(fmt=b*)のグラフを作成してみます。

# プロット範囲の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]

指定できるプロットの種類は次の表の通りです

プロットの種類 [marker] プロットの表示例
丸(中) '.'
丸(小) ','
丸(大) 'o'
下向き三角 'v'
上向き三角 '^'
四角 's'
五角形 'p'
星型 '*'
ひし形 'D'
ひし形(細) 'd'

plt.plot()で実際にグラフのプロットの種類を変更した例を見てみましょう。

# マーカーの設定
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] 線の表示例
実線 '-'
破線 '-'
一点鎖線 '-.'
点線 ':'

plt.plot()で実際にグラフの線の種類を変更した例を見てみましょう。

# 線の設定
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]

fmtで指定できる線の色は次の表の通りです

プロットの種類 [color] 色の表示例
'b'
'g'
'r'
シアン 'c'
マゼンタ 'm'
黄色 'y'
'k'
'w'

plt.plot()で実際にグラフの色を変更した例を見てみましょう。

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()

  • 【参考】色の設定は、キーワード引数colorを使用するとより詳細に設定することも可能です。
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 

グラフ要素の追加・変更

グラフの主要な要素の追加・変更方法について解説します。

グラフ操作 関数名 コメント
タイトル追加 plt.title("タイトル名") グラフ上部に"タイトル名"を表示
軸ラベル追加 plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
x軸, y軸に"ラベル名"をそれぞれ表示
軸の範囲変更 plt.xlim(x軸最小値, x軸最大値)
plt.ylim(y軸最小値, y軸最大値)
x軸, y軸の最大値・最小値を変更
凡例の表示 plt.legend() 凡例を表示

以下で、それぞれ解説していきます。

グラフタイトルの追加:plt.title()

グラフタイトルは、次の関数で設定します。

  • グラフタイトル:plt.title("title name")

実際に設定例を見てみましょう。

# プロット範囲の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(), plt.ylabel()

軸ラベルは次の関数で設定します。

  • x軸ラベル:plt.xlabel("x軸ラベル名")
  • y軸ラベル:plt.ylabel("y軸ラベル名")

実際に設定例を見てみましょう。

# プロット範囲の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()

タイトルや軸ラベルになどに日本語を使いたい場合は、特別な設定が必要です。

設定方法については次の記事を参考にしてください。

≫Matplotlib 日本語の表示方法 厳選3選|最適な方法選んで!
Matplotlibでグラフを描くとき、「日本語を表示しようとしたら文字化けした!」「日本語を表示するには、何を設定すればいいの?」という方向けに、「Matplotlibで日本語を表示する方法厳選3選」、「使用できるフォントのチェック方法」を紹介していきます。追加のインストールなしで、フォントの設定を変更するだけの方法を紹介します!
www.yutaka-note.com/entry/matplotlib_japanese
 

軸の範囲の変更: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()

軸の範囲を変更すると、自動で軸目盛が振りなおされます。

軸周りの設定は、次の記事で詳しく解説しているので、参考にしてください。

≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
 

凡例の追加: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=ラベル数

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()

  • 【参考】凡例の設定については、次の記事で詳しく解説しているので参考にしてください。
≫Matplotlib plt.legend() | 凡例の位置とスタイル設定完璧ガイド!
Matplotlibでは、デフォルトでは凡例は表示されません。「凡例(legend)を表示するにはどうしたらいいの?!」「凡例の位置や見た目の設定方法がわからない!」という方向けに、「凡例を表示する関数plt.legend()の使い方」「引数で位置や見た目を簡単に設定する方法」を紹介していきます。自分の作りたい凡例を作れるようになりましょう!
www.yutaka-note.com/entry/matplotlib_legend
 

グラフの保存方法:plt.savefig()

グラフを保存する場合、plt.savefig()を使用します

  • plt.savefig(ファイル名):カレントフォルダに保存
  • plt.savefig(保存先のパス):指定したフォルダに保存

デフォルトでは、pingファイル形式で保存されます。

pict_name = "01_pyplot"
plt.savefig(pict_name)
# カレントフォルダに01_pyplot.pngファイルが保存される
 
from pathlib2 import Path
root = Path(r"C:\Users\YutaKa")
pict_name = "01_pyplot例"
plt.savefig(root / pict_name)
# C:\Users\YutaKaに01_pyplot.pngファイルが保存される

グラフの保存はfigureオブジェクトを使用しても可能です。

詳しくは次の記事を参考にしてください。

≫Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
 

オススメ|matplotlibとデータ分析の勉強方法

今回は、Matplotlibの軸・目盛り・目盛り線の設定について基本的なものを解説しました。

matplotlibは奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis