17. Matplotlibでグラフの描画

Matplotlibで折れ線グラフの描画と装飾(タイトル、ラベル、目盛線、凡例、色)

更新日:

この記事では、PythonのMatplotlibにおける折れ線グラフの作成方法を初心者向けに解説しています。1つ、もしくは複数の折れ線グラフの描き方や、タイトル、ラベル、目盛線、凡例、色などの装飾方法など、折れ線グラフについてはこれだけを読んでおけば良いよう、徹底的に解説しています。

 

Matplotlibで直線のグラフの描画

まず初めに、Matplotlibで直線のグラフの描き方の例を見ていきます。1次式y = 2x + 3をグラフにしてみましょう。

以下がそのコードになります。

In [1]: 
import numpy as np
import matplotlib.pyplot as plt
 
# データ準備
x = np.linspace(0, 10, 5) # 横軸範囲指定
y = 2 * x + 3 # y = 2x + 3
 
# グラフ描画
plt.plot(x, y) # 折れ線グラフ描画
plt.show()

 

コードを実行すると、以下のようなグラフが表示されます。

Out:

 
それではプログラムの説明に入ります。

import numpy as np
import matplotlib.pyplot as plt

まず最初に必要なライブラリをimport文で読み込んでいます。NumPyを利用する為にnumpyをインポートします。その際に別名「np」を付けることにより、以降のプログラムでは「numpy」と記述しなくても「np」と記述することでNumPyを使うことができるようになります。また同様にMatplotlibを利用する為に、matplotlib.pyplotクラスをインポートし、別名として「plt」を付けています。
 
 

x = np.linspace(0, 10, 5) # 横軸範囲指定

np.linspace(0, 10, 5)で0から10までの間を、等間隔で5個の点に分割した点を作成し、変数xに代入しています。

以下のコードを実行すると、xにはndarray型で分割した値が設定されていることがわかります。

ここでは直線をグラフ化しますので、分割数は5個で無く最低2個あれば見栄えに変わり無いですが、曲線を描く時には、分割数によりグラフの滑らかさなどの見え方が変わってきます。

In [2]: x = np.linspace(0, 10, 5)
...: x
Out[2]: array([ 0. , 2.5, 5. , 7.5, 10. ])

 
 

y = 2 * x + 3 # y = 2x + 3

次にy = 2 * x + 3で、変数xに代入された5つの各値を元に2 * x + 3を順次計算し、変数yに格納していきます。以下で変数yの内容を確認すると、計算結果がndarray型で格納されていることがわかります。

In [3]: y = 2 * x + 3
...: y
Out [3]: array([ 3., 8., 13., 18., 23.])

 
 

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

これら算出された5個のx、yのペアを元に、上記のコードでグラフを描画しています。
 
 
 
 

Matplotlibで曲線y = sin(x)のグラフ作成

次に式を変更して、y = sin(x)で曲線のグラフを描画してみます。

In [4]: 
import numpy as np
import matplotlib.pyplot as plt
 
# データ準備
x = np.linspace(0, 10, 100) # 横軸範囲指定
y = np.sin(x) # y = sin(x)
 
# グラフ描画
plt.plot(x, y) # 折れ線グラフ描画
plt.show()

 

結果は以下のようなグラフになりました。

Out:

 
それではプログラムの要点を解説していきましょう。
 

x = np.linspace(0, 10, 100) # 横軸範囲指定

ここでは、np.linspace(0, 10, 100)で0から10までの間を、等間隔で100個の点に分割した点を作成し、変数xに代入しています。

分割数が小さいとグラフが滑らかに表示されない為、分割間隔を100にしています。

もし分割間隔が少ないと、角ばったグラフになってしまいます。以下は5個の例です。

曲線の場合は、分割間隔を変更して結果を確認しながら、適切な間隔を探していくことになります。

 

Matplotlibで折れ線グラフの装飾(タイトル、ラベル、目盛線、凡例、色)

次に、Matplotlibで作成したグラフに対して、タイトルやラベルなどの装飾を施していきます。

In [5]: 
import numpy as np
import matplotlib.pyplot as plt
 
# データ準備
x = np.linspace(0, 10, 100) # 横軸範囲指定
y = np.sin(x) # y = sin(x)
 
# グラフ装飾
plt.ylim(-1.5, 1.5) # (1)y軸範囲
plt.title("sin(x)", fontsize=24) # (2)タイトル
plt.xlabel("x", fontsize=24) # (3)x軸ラベル
plt.ylabel("y", fontsize=24) # (4)y軸ラベル
plt.grid(True) # (5)目盛線表示
plt.tick_params(labelsize = 18) # (6)目盛線ラベルフォントサイズ
 
# グラフ描画
plt.plot(x, y, color='b') # (7)線を青色
plt.show()

 

実行結果は、以下のようになります。

Out:

 

それではプログラムを説明していきます。グラフの装飾の箇所に絞って説明します。
 

plt.ylim(-1.5, 1.5) # (1)y軸範囲

(1)では、ylimを使いy軸の表示範囲を指定しています。
 
 

plt.title("sin(x)", fontsize=24) # (2)タイトル
plt.xlabel("x", fontsize=24) # (3)x軸ラベル
plt.ylabel("y", fontsize=24) # (4)y軸ラベル

(2)ではtitleでタイトルsin(x)を、(3)ではxlabelでx軸ラベルを、(4)ではylabelでy軸ラベルを表示しています。それぞれの関数では、引数として渡した文字列を表示します。その際にフォントサイズも引数で指定しています。
 
 

plt.grid(True) # (5)目盛線表示

(5)では、gridにTrueを指定することにより、目盛線を表示しています。Falseを指定したり、gridを記述しなければ、目盛線は表示されません。
 
 

plt.tick_params(labelsize = 18) # (6)目盛線ラベルフォントサイズ

(6)では、目盛線のラベルのフォントサイズを指定しています。
 
 

plt.plot(x, y, color='b') # (7)線を青色

(7)では、plotの引数colorに記号bを渡し、グラフの線を青色で表示しています。指定できる主な色は以下です。

記号
b
k
r
g
y
w
cシアン
mマゼンダ

色はcolor = (0.0, 0.0, 1.0)のように、RGB それぞれのを色の要素を 0.0 ~ 1.0 のタプルで指定することも可能です。

 

 

Matplotlibで2つの折れ線グラフを重ねて描画

次は2つの式y = sin(x)、y = cos(x)を元に、Matplotlibで折れ線グラフを描画してみます。

In [6]: 
import numpy as np
import matplotlib.pyplot as plt
 
# データ準備
x = np.linspace(0, 10, 100) # 横軸範囲指定
y1 = np.sin(x) # (1) y = sin(x)
y2 = np.cos(x) # (2) y = cos(x)
 
# グラフ装飾
plt.ylim(-1.5, 1.5) # y軸範囲
plt.title("sin(x) & cos(x)", fontsize=24) # タイトル
plt.xlabel("x", fontsize=24) # x軸ラベル
plt.ylabel("y", fontsize=24) # y軸ラベル
plt.grid(True) # 目盛線表示
plt.tick_params(labelsize = 18) # 目盛線ラベルサイズ
plt.legend(loc="lower left", fontsize=18) # (3)凡例表示
 
# グラフ描画
plt.plot(x, y1, color='b', label="sin(x)") # (4) y = sin(x)描画
plt.plot(x, y2, color='r', label="cos(x)") # (5) y = cos(x)描画
plt.show()

 

Out:

 

それではプログラムのポイントを説明します。

y1 = np.sin(x) # (1) y = sin(x)
y2 = np.cos(x) # (2) y = cos(x)
… … … … 省略 … … … …
plt.plot(x, y1, color='b', label="sin(x)") # (4) y = sin(x)描画
plt.plot(x, y2, color='r', label="cos(x)") # (5) y = cos(x)描画

(1)では式y = sin(x)を定義し(4)でグラフの描画を、(2)では式y = cos(x)を定義し(5)でグラフの描画をしています。(4)、(5)ではそれぞれの式が区別できるようlabel="sin(x)"、label="cos(x)"でラベルを付けています。
 
 

plt.legend(loc="lower left", fontsize=18) # (3)凡例表示

(4)、(5)で付けたラベルを(3)で凡例として、グラフの左下に表示しています。loc="lower left"で指定しているのが凡例の表示位置で、次のような指定ができます。

表示位置locの指定内容
右上upper right
右下lower right
左上upper left
左下lower left

 
 
 

Matplotlibで複数のグラフを並べて描画(折れ線グラフ、散布図、棒グラフ、円グラフなど)

複数の折れ線グラフを比較できるよう並べて表示したり、また折れ線グラフと円グラフや棒グラフなど他のグラフと並べて表示する方法は、以下のリンクをご参照ください。


 
 
 
著書の紹介です。

 
 

関連記事です。
棒グラフや積み上げ棒グラフの描き方については、こちらをご覧ください。


 
円グラフの描き方については、こちらが参考になります。

 
散布図も様々な場面で使われますね。

 

-17. Matplotlibでグラフの描画

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.