Phython

【matplotlib】誰でも簡単にpythonで関数グラフを作成する方法

pythonを使っていろいろな種類のグラフを書きたい!

本記事では、このような要望にお応えしていきます!

ということで今回は、pythonでグラフを作成するために用いられるモジュール『matplotlib』を用いて、さまざまなグラフの作成方法をご紹介していきます。

初心者の方でもすべて理解できるように、一つ一つ丁寧に説明していくので、ぜひ最後までご覧ください。

この記事でわかること

  • matplotlibの基本的な使い方
  • pythonでの様々なグラフの書き方

 グラフ作成の準備

実際にグラフを作成する前に、下準備が必要です。

ということで、ここからは具体的なコードを用いて説明していきます。
実際に自分でも動作を確かめて、理解を深めていきましょう!

pythonの始め方に関しては、以下の記事を参考にしてください。

matplotlibのインポート

グラフを作成する前の下準備といってもやることはこれだけです。

ちなみに、グラフを作成するコードを書く際にNumpyの基本知識も必要となってくるので、「Numpyって何?」といった方は、以下の記事に目を通しておくとよいと思います。

では、さっそくmatplotlibをインポートしていきましょう。

import numpy as np
import matplotlib.pyplot as plt

インポート方法は上記の通りです。
今回は、Numpyも使用するので、一緒にインポートしてしまいます。

では、さっそくグラフ作成の方へ入っていきましょう

 matplotlibを用いたグラフ作成

直線グラフの作成

まず、基本中の基本である直線のグラフを作成していきましょう。

<input>

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 100)
y = x

plt.plot(x, y)
plt.show()

<output>

少しコードの確認をすると、まず4行目でxに0から1までの数値を100刻みで代入しています。
x = 0、0.01、0.02、.....、0.99、1.00といった感じですね。

こちらはこの先色々なグラフを作るうえで毎回行う操作なので覚えておきましょう。

そして、5行目で関数の形を定義しています。今回は直線の式を作りたかったので、y=xという関数を作っています。

その後7行目と8行目でxとyの値をグラフに表示しているといった形になっています。
他にもいろいろな形の関数を作ることが出来るので、試しにいくつか作ってみましょう。

複数のグラフを一つにまとめて作成

<input>

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(-1, 1, 100)
y1 = x1
x2 = np.linspace(-1, 1, 100)
y2 = x2 ** 2
x3 = np.linspace(-1, 1, 100)
y3 = x3 ** 3

plt.plot(x1, y1)
plt.plot(x2, y2)
plt.plot(x3, y3)

plt.show()

<output>

今度は、複数グラフの作成です。

理系の方はもうお気づきかもしれませんが、青い直線が一次関数y=x、オレンジ色の曲線が二次関数y=x^2、緑色の曲線が三次関数y=x^3となっています。

まず、今回は三つのグラフを作成しているので、x1、x2、x3を先ほどとまったく同じように作ります。

そして、関数の形の定義なのですが5行目、7行目、9行目で行っているのがわかると思います。
y = x **○○ と書くと、x累乗になります。ちなみに、y = x*2と書くと、y = 2xが作られるので、気になる方はぜひ試してみてください。

複数のグラフを複数に分けて作成

<input>

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

x1 = np.linspace(-1, 1, 100)
y1 = x1
x2 = np.linspace(-1, 1, 100)
y2 = x2 ** 2
x3 = np.linspace(-1, 1, 100)
y3 = x3 ** 3

ax1.plot(x1, y1)
ax2.plot(x2, y2)
ax3.plot(x3, y3)


plt.show()

<output>

続いては、同じ平面上に表示していた三つの関数を、別々の平面に分ける方法です。
新たに追加されたコードを確認していきましょう。

まず、4~7行目です。

4行目では、figureオブジェクトといったものを作成してそれにfigといった名前を付けています。
figureとは、『図』のような意味合いがあるので、とりあえずいくつかのグラフを作らなければいけないからその土台となる白紙のようなものを用意しているんだなと思っていてください。

その後、5~7行目でaxといったものを作っています。
こちらは、axesオブジェクトと呼ばれていて、各グラフのことです。左上のものからax1、ax2、ax3となっています。
複数のグラフを一度に作りたいときは、まずfigureオブジェクトという土台を作って、その上にaxesオブジェクトというグラフを配置していくといったイメージを持ってもらえると良いと思います。

また、今回はaxesオブジェクトが三つ存在するのでそれぞれの場所を指定してあげないといけません。
その指定を行っているのが、fig.add_subplot(x, y, z)といった関数です。

こちらの関数は、「x行y列のデータを作成し、その中のz番目にこのグラフを配置しますよ」といったことを意味しています。
こちらもグラフを複数設置する際に、必要なものになっているので覚えておきましょう。

グラフに対するカスタマイズ

<input>

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot()

x1 = np.linspace(-1, 1, 100)
y1 = x1
x2 = np.linspace(-1, 1, 100)
y2 = x2 ** 2
x3 = np.linspace(-1, 1, 100)
y3 = x3 ** 3

plt.plot(x1, y1, label = 'y=x', color = 'r', linewidth = '2', linestyle = 'solid', alpha = 0.5)
plt.plot(x2, y2, label = '$y=x^2$', color = 'y', linewidth = '4', linestyle = 'dashed', alpha = 1.0)
plt.plot(x3, y3, label = '$y=x^3$', color = 'k', linewidth = '2', linestyle = 'dotted', alpha = 1.0)

ax.set_xlabel('x')
ax.set_ylabel('y')
plt.legend()

plt.show()

<output>

みなさん、先ほどと比べてどこが変化したかお気づきでしょうか。
そうです、plt.plotの引数が増えているんです。

plt.plotの変数の説明につきましては、以下の表にまとめましたので参考にしてください。

label凡例の名前を決定するための引数です。
ちなみに2乗や3乗は$で囲うことで表現することが出来ます。
colorグラフの色を決定するための引数です。
上記のコードのように一文字で指定できるものは以下の通りです。
b … 青 (Blue)
・g … 緑 (Green)
・r … 赤 (Red)
c … シアン (Cyan)
・m … マゼンタ (Magenta)
・y … 黄 (Yellow)
・k … 黒 (Black)
・w … 白 (White)
一文字で指定できるものは、8色しか存在していませんが、それ以外にも様々な指定方法があるので興味のある方は調べてみましょう。
linewidthグラフの線の太さを指定する引数です。
linestyleグラフの線のスタイルを指定する引数です。
指定できる主なスタイルは以下の通りとなっています。
・solid
・dashed
・dashdot
・dotted
alphaグラフの透明度を指定する引数です。
・0:完全透明
・1:不透明

また、18~20行目にも新たなコードがしれっと加わっていると思います。

18~19行目に関しては、グラフのラベルを作成する際に必要なコードになっています。
グラフのラベルとは、縦軸とか横軸にあるxとyのことです。

そして、20行目ですが、こちらは凡例を設置するためのおまじないとなっております。これがないと凡例が表示されないので忘れずに書くようにしましょう。
ちなみに、凡例というのは右下に出ている、各グラフの名前を説明しているやつのことですね。

その他の様々なグラフ

<input>

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(-1, 1, 100)
y1 = np.exp(x1)
x2 = np.linspace(-1, 1, 100)
y2 = np.cos(2*np.pi*x2)

t = np.linspace(0, 2*np.pi, 100)
a = 1
x3 = a*(t - np.sin(t))
y3 = a*(1 - np.cos(t))

plt.plot(x1, y1)
plt.plot(x2, y2)
plt.plot(x3, y3)

plt.show()

<output>

先ほどまでは、一次関数、二次関数、三次関数を扱ってきましたが、もちろんmatplotlibを使えばこのような高校数学で勉強するであろう様々なグラフを作成することが出来ます。

各グラフの説明をしますと、

青色のグラフが y = e^x
オレンジ色のグラフが y = cos(2πx)
緑色のグラフが サイクロイドとなっています。

もうコードの説明は不要ですかね?
ちなみに、三角関数やネイピア数などの特殊な関数は、Numpyの中に入っているので、np.○○と記述してあげると書くことが出来ます。

皆さんも一緒に、自分の知っている関数の式を実際にコードに当てはめてみてグラフを作ってみてください!

作成したグラフを保存する方法

<input>

import numpy as np
import matplotlib.pyplot as plt
from google.colab import files

x1 = np.linspace(-1, 1, 100)
y1 = np.exp(x1)
x2 = np.linspace(-1, 1, 100)
y2 = np.cos(2*np.pi*x2)

t = np.linspace(0, 2*np.pi, 100)
a = 1
x3 = a*(t - np.sin(t))
y3 = a*(1 - np.cos(t))

plt.plot(x1, y1)
plt.plot(x2, y2)
plt.plot(x3, y3)

plt.savefig("fig.png")
files.download("fig.png")
plt.show()

現在皆さんが作っているグラフ、せっかくのなので保存してみましょう。
保存をするために追加する行は3行のみです。

まずは上記プログラムの三行目です。
こちらは「Google Colaboratoryからファイルをインポートするよ」といった宣言でこれがないとファイルがGoogle Colaboratoryから持ってこれないので書いてしまいましょう。

次に19~20行目です。
ここでは、ファイルの形式と名前を指定してファイルのダウンロードを行っています。

まず、19行目でファイルをpng形式のfigという名前で保存して、20行目でその保存したファイルをダウンロードするといった感じですね。
このコードを書いて実行すると、指定の形式でファイルがダウンロードできるはずです。

ちなみに注意ですが、plt.show()よりも後ろの部分でダウンロードの文を書いてしまうとファイルが白紙で保存されてしまいます。
位置が少し変わるだけで結果が正しく出てこないので気を付けましょう。

 まとめ

今回は、matplotlibを用いていろいろなグラフの作成に取り組んできましたが、自分好みのグラフは書けましたか?

本記事で行ったことはグラフの基礎であり、データ解析のためのグラフを書く上での基盤となる部分です。

ぜひ自分でもコードを打って、いろいろな形のグラフ作成に挑戦してみてください!

-Phython
-,