Matplotlib

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスター

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスター

 

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

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

本記事では、初心者でもわかるように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の基本を習得し、次のステップに進みましょう。...

 

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

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

 

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

# x座標の値
x = [1, 2, 3]
# y座標の値
y = [1, 5, 3]

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

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

 

<Output>

簡易的なプロット方法

 

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

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

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

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

 

柔軟性あるグラフの書き方(オブジェクト指向スタイル)

 

柔軟性のあるグラフの書き方は、以下の流れでグラフを作成します。

  1. Figureオブジェクトを作成(ウインドウ)
  2. Axesオブジェクトを作成(グラフ描画する領域)
  3. Axesオブジェクトにプロット

 

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

また、Axesオブジェクトは、x-y座標、またはx-y-z座標などで指定できる領域を表します。

基本的には、Figureは1つ以上のAxesオブジェクトを含むことができます!(まさに上図のようなイメージです)

 

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

FigureオブジェクトとAxesオブジェクトFigureオブジェクトとAxesオブジェクト

 

 

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

# 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オブジェクトやaxesオブジェクトに関するメソッドを使用します。

このようなグラフ作成方法を『オブジェクト指向スタイル』といいます。

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

 

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

 

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

 

plt.figure()

 

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

 

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

 

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

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

ax = fig.add_subplot(111)

 

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

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

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

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

 

<output>

axesオブジェクトの具体例axesオブジェクトの具体例

 

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

 

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

 

Axesオブジェクトに対して、plotメソッドを呼ぶだけで、Axesオブジェクトにプロットすることができます。

具体例を以下に示します。

# 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オブジェクトとAxesオブジェクトを同時作成

 

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

<Input>

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

 

<Output>

subplotの具体例

 

axesオブジェクトは『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)

 

多くの方が、この方法を使用すると思います。

実際に、私が実務で使用する際もFigureオブジェクトとAxesオブジェクトを同時に作成する方法を一番使用します!!

そのため、ここからの具体例では、この方法を利用して色々なグラフを作成していきます。

 

実際、公式ドキュメントにも以下のように書かれています。

In general, try to use the object-oriented interface over the pyplot interface.

訳) 一般的には、pyplot インターフェースよりもオブジェクト指向のインターフェースを使用するようにしてください。

引用 : The Lifecycle of a Plot

 

 

 

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[1, 0].plot(x, y3)
axes[1, 1].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([1, 2, 3, 4, 5])
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[1].plot(x, y2)

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

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

# 軸ラベルを加える
axs[0].set_xlabel("time", fontsize = 12)
axs[1].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([1, 2, 3, 4, 5])
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』という引数を設定することで、任意の位置に判例を設定することができますが、今回は省略いたします。

 

スタイルの変更

 

matplotlibには、ニーズに合わせて可視化ができるように多くのスタイルが用意されいます。

スタイルを変更することでグラフの雰囲気はガラッと変わります。

使用できるスタイル一覧は以下のように取得できます。

print(plt.style.available)

 

<output>

['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']

 

以下のように選択したスタイルを設定します(今回は具体例として『fivethrtyeight』というスタイルを使用)

plt.style.use('fivethirtyeight')

 

これで、スタイルの設定は完了です。

グラフを作成すると以下のようにスタイルが変更されます!!

 

スタイル変更後のグラフスタイル変更後のグラフ

 

*上記のようにスタイルを変更するとnotebook全てのプロットに選択したスタイルが設定されます。

 

ブロック単位でスタイルを変更する場合は、plt.style.context()を使用します。

x = np.array([1, 2, 3, 4, 5])
y = np.array([-1, -3, 3, 1, 2])

with plt.style.context('seaborn'):
    fig, ax = plt.subplots()
    ax.plot(x, y, linestyle = '--', color = 'g')
plt.show()

 

<output>

 

ブロック内でスタイル変更ブロック内でスタイル変更した結果

 

 

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点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...