Matplotlib

【15分】Pythonでグラフを作成する方法(matplotlib)

Pythonでグラフを作成する方法【15分でグラフが作れる】

 

  • Pythonでグラフをどうやって綺麗に書くの?
  • Pythonで綺麗なグラフを書けるようになりたい…

この悩みに答えていきます。

実は、PythonはExcelよりも簡単に高度なグラフを作成することができます。

本記事では、初心者でもわかるようにPythonでグラフを書く方法を丁寧に紹介していきます。

本記事を読むメリット

  • 完全初心者でも15分ほどで簡単にグラフが作成できるようになる
  • グラフを綺麗に書くための最低限の知識が得られる

 

 

Pythonでグラフを作成する準備

Pythonでグラフを書くためには、ある程度の準備が必要です。

以下の手順で説明していきます

  • matplotlibのインストール
  • グラフを書くためのライブラリをインストール

 

matplotlibのインストール

 

今回は、Pythonでグラフを書くために、matplotlibというライブラリを使います。

Google Colabを使用する場合は、最初からインストールされているため特にインストールする必要はありません。

 

【10分で完了】Google Colabのインストール法・使い方Google Colabは、GPUを使用できるため、低コストかつ高速で機械学習の実装を行う際に必要不可欠なツールです。本記事では、Google Colabのインストール方法と注意事項を10〜15分程度でまとめました。...

 

もし、インストールされていない場合は、パソコンがMacならターミナル、Windowsならコマンドプロンプトから以下のコマンドでインストールすることができます。

pip install matplotlib

 

 

グラフを書くためのライブラリをインポート

 

グラフを作成するための、ライブラリをインポートしていきましょう。

今回インポートするのは、以下のライブラリをインポートすることでグラフを書く準備が整います。

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

 

notebookでグラフを書く場合は、『%matplotlib inline』というおまじないが必要です(この時点で特に理解する必要はないです)

 

次の章から、基本的なグラフの書き方を紹介していきます。

Pythonグラフの作成方法

 

グラフの作成方法は、簡易的な方法と柔軟性のある方法があります。

  1. 簡易的な方法
  2. 柔軟性のある方法

 

基本的には、Numpyの知識を前提とするので、Numpyの基本を理解していない方は下記の記事を参考にしてください。

 

numpyの使い方【15分で使えるようになる】機械学習やデータ解析をいち早く行うために、numpyに関する基本事項を体系的にまとめました。15分程度で読めるので、この記事でnumpyの基本を習得し、次のステップに進みましょう。...

 

具体的に説明していきます。

グラフを簡易的に書く方法

 

まずは、簡易的にグラフを作成する方法を説明します。

<Input>

# x座標の値
x = 
# y座標の値
y = 

# 簡易的なプロット法
plt.plot(x, y)

# グラフを表示
plt.show()

 

<Output>

簡易的なプロット方法

 

このように『plt.plot』を使用することで簡単にグラフを作成することができます。

しかし、この書き方はカスタマイズ性が低いです…

次章ではより柔軟的にグラフを作成する方法を説明していきます。

『plt.plot』にy座標のみを入力『plt.plot(y)』を設定することで、インデックスがx座標に自動で設定されます。

 

柔軟性あるグラフの書き方

 

柔軟性のあるグラフの書き方では、FigureオブジェクトとAxオブジェクトを生成しグラフを作成します。

具体的には、以下の流れでグラフを作成します。

  1. Figureオブジェクトを作成(ウインドウのようなもの)
  2. Axオブジェクトを作成(グラフのようなもの)
  3. Axオブジェクトにプロット

 

少しわかりにくいので下記にイメージを示します。

axオブジェクトとFigureオブジェクトFigureオブジェクトとAxオブジェクトの具体例

 

Figureオブジェクトはグラフを配置するためのウインドウ、Axオブジェクトはグラフ自体の役割を担います。

まずは、具体的なコード見てみましょう。

<Input>

# x座標の設定
x = np.linspace(0, 10, 100)

# プロットする関数
y = x 

# Figureオブジェクトを作成
fig = plt.figure()

# axオブジェクトをFigureの上に作成
ax = fig.add_subplot(111)

#axオブジェクトにプロット
ax.plot(x, y)

#プロットの表示
plt.show()

 

<Output>

先ほどと同じグラフが表示されました。

少し難しいかもしれないので、詳しく説明していきます。

 

Figureオブジェクトの作成方法

 

下記のコードでFigureオブジェクトを作成することができます。

<Input>

plt.figure()

 

この1行でFigureオブジェクトによるウインドウが作成されます。

 

Axオブジェクトの作成方法

 

Axオブジェクトを作成するには、『add_subplot』メソッドを使用します。

具体的なコードを下記に示します。

ax = fig.add_subplot(111)

 

このコードは、ウインドウの『1行1列の1番目の位置』にグラフを表示することを意味します。

より一般的な例を示すために、2行2列のケースを使って説明します。

<Input>

# Figureオブジェクトを作る
fig = plt.figure(figsize=(8,8))

# Axオブジェクトを作る
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)

 

<output>

 

この時点では、プロットされていない空のグラフが作成されます。

 

Axオブジェクトにプロットする

 

Axオブジェクトに対して、『plot』メソッドを使用することでAxオブジェクトにプロットすることができます。

<Input>

# x座標の設定
x = np.linspace(0, 10, 100)

# プロットする関数
y = x 

# Figureオブジェクト
fig = plt.figure(figsize=(8,8))

# Axオブジェクト
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)

# グラフにプロットする
ax1.plot(x, y)

# グラフを表示
plt.show()

 

<Output>

プロット方法

具体例として、『ax1』にプロットしました。

基本的な使い方は以上です。

 

FigureオブジェクトとAxオブジェクトを同時作成

 

下記のコードで、ウインドウとグラフを同時に作成することもできます。

<Input>

#ウインドウとグラフを同時に挿入
fig, axes = plt.subplots(2, 2, figsize=(8, 8))

 

<Output>

subplotの具体例

 

axオブジェクトは『axes』というリストに格納されています。

<Input>

axes

 

<Output>

array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f71bc8cf9b0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7f71bbd15da0>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x7f71bbcd4048>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7f71bbc82240>]],
      dtype=object)

 

実務では、この方法が最もよく使用されます!

そのため、次章以降は、この方法を使用して具体的に色々なグラフを作成していきます。

一見、難しそうですが、具体例を見ればすぐにわかるので安心してください。

Pythonのグラフを並べて表示する

柔軟性のあるコードの利点の一つとしてグラフを並べて表示するのが簡単になります。

実際のコードを使って説明していきます。

 

グラフを並べて表示する

 

グラフを並べて表示するコードは、以下のように書くことができます。

#x座標の設定
x = np.linspace(0, 10, 1000)

#プロットする関数
y1 = x
y2 = x**2
y3 = np.sin(x)
y4 = np.cos(x)

#ウインドウとグラフを同時に挿入
fig, axes = plt.subplots(2, 2, figsize=(8, 8))

#グラフにプロット
axes[0, 0].plot(x, y1)
axes[0, 1].plot(x, y2)
axes.plot(x, y3)
axes.plot(x, y4)

#グラフを表示
plt.show()

 

このように、一度にウインドウとグラフを表示でき、たった数行で複数のグラフを書くことができます。

そのため、以下は柔軟性のあるグラフの書き方に焦点を当てて説明していきます。

 

Pythonグラフを重ねて書く方法

pythonのグラフを重ねて書くためには、『同じグラフにプロットの命令をする』だけで書けます

具体的なコードは、以下のようになります。

# x座標の設定
x = np.linspace(0, 10, 100)

# プロットする関数
y1 = np.sin(x)
y2 = np.cos(x)

# ウインドウとグラフを同時に設定
fig, ax = plt.subplots()

# グラフにプロット
ax.plot(x, y1, color = "b")
ax.plot(x, y2, color = "g")

# プロットの表示
plt.show()

 

色は、デフォルトでも違う色になるので記入しなくてもOKです!!

 

Pythonグラフのプロット形式を変える方法

 

Pythonのプロット形式の変え方を具体的に説明していきます。

プロット形式とは、

  • プロットの色
  • プロットの方法

の二つです。

プロットの色を変える方法

 

プロットの色を変える方法も簡単にできます。

具体的なコードを示します。

<Input>

# x座標の設定
x = np.linspace(0, 10, 100)

# プロットする関数
y = x 

# ウインドウとグラフを同時に
fig, ax = plt.subplots()

# グラフにプロット(color = "指定したい色": これで色指定可能)
ax.plot(x, y, color = "g")

# プロットの表示
plt.show()

 

<Output>

やり方は、『plot(x, y, color = “色”)で色を選ぶだけです!

色の種類は、以下がよく使われます。

b g r y k w c m
書き方 シアン マゼンタ

 

より詳しいグラフの色選択に関しては、下記の公式ページを参考にしてください

公式ページはこちら(プロットの色選択)

 

プロット方法の変更

 

以下では、プロット方法のカスタマイズを説明します。

具体的なコードは以下のようになります。

<Input>

# 使用するデータ
x = np.array()
y = np.array([-1, -3, 3, 4, 5])

# ウインドウとグラフを設定
fig, ax = plt.subplots()

# プロットの方法の変更
ax.plot(x, y, linestyle = '--', linewidth = 4,
        marker = 'o', markersize = 12, markerfacecolor='r', 
        markeredgecolor='k', markeredgewidth=1.5, alpha=0.5)

plt.show()

 

<output>

プロット方法の変更

plotメソッドの引数を説明していきます。

plot  
linestyle プロット線のスタイルを変更
linewidth プロット線の太さを変更
marker マーカーの種類を変更
markersize マーカーの大きさを指定
markerfacecolor マーカの中身の色を指定
makeredgecolor マーカのエッジの色を指定
makeredgewidth マーカのエッジの太さを指定
alpha マーカの透明度を指定

 

より細かいカスタマイズ方法は、下記の公式ページを参考にしてください。

公式ページをカスタマイズを確認 

 

Pythonグラフの基本的なカスタマイズ

 

基本的なグラフのカスタマイズ方法を紹介します。

グラフタイトルと軸ラベル

 

グラフと軸ラベルも簡単につけることができます

具体的なコードは、以下のように書けます

x = np.linspace(1, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, axs = plt.subplots(1, 2, figsize = (8, 4), constrained_layout = True)

axs[0].plot(x, y1)
axs.plot(x, y2)

# ウインドウにタイトルを加える
fig.suptitle("Python matplotlib", fontsize = 20)

# グラフにタイトルを加える
axs[0].set_title("sin(x)", fontsize = 15)
axs.set_title("cos(x)", fontsize = 15)

# 軸ラベルを加える
axs[0].set_xlabel("time", fontsize = 12)
axs.set_xlabel("time", fontsize = 12)
# LaTexも使える
axs[0].set_ylabel(r"$\omega$", fontsize = 12)

 

  1. fig.suptitle : ウインドウにタイトルを追加
  2. set_title : 各グラフにタイトルを追加
  3. set_xlabel : x軸ラベルを追加
  4. set_ylabel : y軸ラベルを追加 

 

fontsizeを指定することで、文字の大きさを指定することができます。

また、文字列部分を『r”$ 〜 $”』のように囲むことで、LaTex形式の文字も入力できます。

 

軸目盛の設定

 

軸目盛の体裁を整えるためには、『plt.tick_params』を使用します。

具体例を早速示します。

x = np.linspace(-5*np.pi, 5* np.pi, 100)
y1 = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y1)


ax.set_title(r"$sin(x)$", fontsize = 15)
ax.set_xlabel("time", fontsize = 12)
ax.set_ylabel(r"$\omega$", fontsize = 12)

# 軸メモリの設定
plt.tick_params(axis='y', width=2, length=8, pad=10, color='r', direction='in', labelsize=15, labelcolor='r')
plt.tick_params(axis='x', width=2, length=8, pad=10, color='r', direction='in', labelsize=15, labelcolor='r')

plt.show()

 

<output>

軸目盛の設定

具体的に『plt.tick_params()』の引数を説明していきます(詳細な説明は、軸目盛のカスタマイズ(公式)を参考にしてください

 

パラメータ ここに説明文を入力してください。
axis 軸目盛をカスタマイズする軸を指定
width 目盛の幅を設定
length 目盛の長さを設定
pad 目盛と目盛ラベルの間の距離を指定
direction 目盛の方向を指定({‘in’, ‘out’, ‘inout’}の中から指定)
color 目盛の色を指定
labelsize 目盛ラベルの大きさを指定
labelcolor 目盛ラベルの色を指定
colors 目盛と目盛ラベルの色を同時に指定

目盛と目盛ラベルは、相手に情報を伝えるために重要な要素の一つです。

ここで説明した方法を用いて、より伝わりやすい可視化を目指してください。

 

 

 

凡例を表示

 

凡例を表示する方法を説明します。

具体的なコードは以下のようにかけます。

<Input>

# 使用するデータ
x = np.array()
y1 = np.array([-1, -3, 3, 1, 2])
y2 = np.array([5, 4, 2, -3, -1])
y3 = np.array([5, -1, 3, -1, 2])

# ウインドウとグラフを設定
fig, ax = plt.subplots()

# plotlabelを指定する
ax.plot(x, y1, linestyle = '--', color = 'g', label = "No1")
ax.plot(x, y2, linestyle = '-.', color = 'b', label = "No2")
ax.plot(x, y3, linestyle = ':', color = 'r', label = "No3")

# 凡例を表示する
ax.legend(fontsize = 10, loc=0)
plt.show()

 

<Output>

 

凡例の表示方法

  1. plotの引数のlabelを設定する
  2. ax.legendで凡例を表示する

ax.legendの引数を説明します。

legend  
fontsize 文字の大きさ
loc

凡例の場所を指定可能(デフォルトでは自動でベストな位置に設定される)

  • upper left : 左上
  • upper right : 右上
  • lower left : 左下
  • lower right : 右下

 

さらに応用ですが、『bbox_to_anchor』という引数を設定することで、任意の位置に判例を設定することができますが、今回は省略いたします。

 

Pythonグラフを保存する方法

グラフを保存する方法も簡単でグラフのコードの最後に下記を入力すること保存が完了します。

#png形式で保存
fig.savefig("test.png")
#pdf形式で保存
fig.savefig("test.pdf")

 

具体例を下記で紹介します。

#x座標の設定
x = np.linspace(0, 10, 100)

#プロットする関数
y1 = np.sin(x)
y2 = np.cos(x)


#ウインドウを作る
fig = plt.figure()

#ウインドウ上にグラフを挿入
ax = fig.add_subplot(111)

#グラフにプロット
ax.plot(x, y1)
ax.plot(x, y2)


#プロットの表示
plt.show()

#png形式で保存する
fig.savefig("test.png")

 

そうすることで、このグラフを”test.png”という名前でpng形式でグラフを保存することができます!

 

Pythonで3次元グラフを作成する方法

 

Pythonでも、mpl_toolkits.mplot3dからAxes3Dをインポートすることで、驚くほど綺麗な3次元グラフを作成することができます。

詳しい内容は、長すぎてしまうので気になる方は下記を参考にしてください(ここまでの内容が理解できれいれば高度なグラフが簡単に作成できます)

 

【入門】Pythonで3次元(3D)グラフを作成(回転させるよ)Pythonで3次元グラフを作成し、カスタマイズする方法を説明しました。具体的には、カラーバーの設置・3次元グラフの回転等を初心者の方でも理解できるように解説しました。詳しい内容は記事を参考にしてください。...

 

Pythonでアニメーションを作成する方法

 

Pythonは、ここで勉強したfigオブジェクトとaxオブジェクトを使用することで簡単にアニメーションを作成することができます。

具体的には、Pythonの『matplotlib.animation.ArtistAnimation』と呼ばれるライブラリを使用することで簡単にアニメーションが作成できます。

具体的な方法が気になる方は下記を参考にしてください(これまでの内容が理解できていれば簡単に高度なアニメーションが作成できます)

 

【Python】matplotlibによるアニメーション作成法(Google Colabratory対応)本記事では、Pythonのmatplotlibを使用したシミュレーションの作成方法をJupyter notebookとGoogle Colaboratoryの両方のケースで徹底解説しました。また、アニメーションの細かいカスタマイズ方法と保存方法までまとめました。詳しい内容は本記事を参考にしてください。...

 

まとめ

 

Pythonでグラフを作成する方法を紹介しました。

pythonでグラフを書く方法は二通りあります

  • 簡易的な方法
  • 柔軟性のある方法

そのあとに、柔軟性のある方法を使用してグラフを重ねて表示したり、並べて表示する方法を紹介しました。

その後、グラフの保存方法も紹介しました!

Excelにも良さがありますがPythonの方が、1文加えるだけで簡単にカスタマイズできるので便利ですね!

さらにmatplotlibを拡張させた『Seaborn』というライブラリを使用することで、プロレベルのグラフを簡単に作成することができます。

 

【15分で習得】seabornの使い方を徹底解説seabornを使用することで、簡単に高度なグラフを描画することができます。また、使用方法もmatplotlibと変わらず簡単に行うことができます。...

 

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点