【初心者向け】Matplotlib入門 | Pythonを使ってデータを可視化してみよう!

オンラインでデータ分析スキルを身につけるなら

はじめに

この章の一部に、統計用語が出て来ますが、用語に関してそれぞれしっかり理解したい方は、合わせて統計学編もご確認ください。

Matplotlibとは

Matplotlib はPythonのグラフ描画のためのライブラリです。
Matplotlibを使うことで、グラフの描画やデータの可視化が簡単に行えます。
折れ線グラフ、ヒストグラムや散布図など表現可能です。
公式ギャラリーにて実際の例を見ることでより理解が深まりますので参考にして頂ければと思います。

Matplotlibのインストール

pipコマンドを用いたMatplotlibのインストールは下記のコマンドでインストール出来ます。
Macの方はターミナル、Windowsの方はコマンドプロンプト上で実行することでインストールが出来ます。

pip install matplotlib

Jupyter Notebookをお使いの方は、起動したNotebookのセルに、先頭に!マークをつけて実行することでインストールすることが出来ます。

!pip install matplotlib

Matplotlibの使い方

Matplotlibを使った最も簡単なグラフの書き方は次の通りです。
1. matplotlib.pyplotをインポートする
2. x軸の配列を作る
3. y軸の配列を作る
4. plot関数を使いプロットする
5. show関数を使いプロットしたグラフを描画する

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5, 5, 0.1) #-5から5まで0.1区切りで配列を作る
y = np.sin(x) #配列xの値に関してそれぞれsin(x)を求めてy軸の配列を生成

plt.plot(x,y) # この場合のplot関数の第一引数xは、x軸に対応し、第二引数のyがy軸にあたります。
plt.show()

plot

折れ線グラフ

折れ線グラフは、数量の大きさを表す位置を線で結んだグラフです。
時間とともに変化する数量を示すときに利用します。

import matplotlib.pyplot as plt
data = [2, 4, 6, 3, 5, 8, 4, 5]
plt.plot(data)
plt.show()

# r--は赤の点線 b--は青の点線 g-- は緑の点線
plt.plot([1,2,3,4],[1,5,10,15],"r--") # 引数にオプションを渡さずに 色 に -- をつけると色 + 点線で表現できます
plt.show()

plot()

第一引数でx軸、第二引数でy軸の値を指定します。
デフォルトでは各点が線で繋がっていますが、第三引数の値を変更することでいろいろなスタイルのグラフにできます。
また、引数は3個で1セットとなっており、引数を続けて何個もプロットしたいデータを入れることで同じグラフ内にいくつも異なるスタイルでプロットすることもできます。
例)
“o” – 点
“^” – 三角の点
“s” – 四角の点
plot()とscatter()で利用可能なmarkerに関しての公式リファレンスです。
さらにオプションにはcolorも指定することができます。
例)
“red” もしくは “r” – 赤
“green” もしくは “g” – 緑
“blue” もしくは “b” – 青

公式リファレンス引用

import matplotlib.pyplot as plt
data = [20, 40, 60, 80 ]
y_data = [10, 5, 3, 1]
plt.plot(data, y_data, marker="o")
plt.savefig("graph.png")
plt.show()

また、plt.xlabel(“x”)でx軸のラベルを付けることが可能です。
同様に、plt.ylabel(“y”)でy軸のラベルを付けることが出来ます。
さらに、plt.savefig()で描画したグラフを画像として保存することが出来ます。
複数のグラフを描画させたい場合は、plot()の後に別のグラフのplot()を行い、show()を実行すれば可能です。

棒グラフ

棒グラフは、複数の独立した項目同士のデータを比較する時に利用するグラフです。
pyplotモジュールのbar()で作ることが出来ます。

import matplotlib.pyplot as plt
a = range(0, 7)
b = [55,21,61,98,85,52,99]
plt.bar(a, b)
# plt.barh(a, b) # 横棒の棒グラフ
plt.show()

import matplotlib.pyplot as plt
import numpy as np

# 棒グラフ
m = ("1", "2", "3", "4", "5", "6", "7","8","9","10","11","12")
y_pos = np.arange(len(m))
# 下記sales変数内の数値を変更して、色々実行してみてください。
sales = [10 ,18 ,32,54,65,96, 120, 140, 145,162, 188, 202]

plt.bar(y_pos, sales, alpha=0.5)
plt.ylabel("Usage")
plt.title("Sales Trends") # 売上推移
plt.show()

ちなみに横棒のグラフはplt.barh()で作ることが出来ます。

import matplotlib.pyplot as plt
a = range(0, 7)
b = [55,21,61,98,85,52,99]
plt.barh(a, b)
# plt.barh(a, b) # 横棒の棒グラフ
plt.show()

 

散布図

散布図は、横軸と縦軸にそれぞれ別の量をとり、データをプロットしたグラフです。
2つの量に関係があるかを見る時に利用するグラフです。
pyplotモジュールのscatter()を使用することで散布図を描画出来ます。

import matplotlib.pyplot as plt
x = [10, 51, 44, 23, 55, 95]
y = [5, 125, 2, 55, 19, 55]
plt.scatter(x,y)
plt.show()

scatterの第3引数にマーカーの形状(oや+)を設定できます。
また、色を変更するにはplot()の所でも説明しましたが、第3引数にcolor=”blue”のようにすることで色変換も可能です。

円グラフ

円グラフとは、丸い図形のグラフで、何らかの構成比率が扇形に分割され表されたグラフです。
pyplotモジュールのplt.pie()で円グラフを描画出来ます。
円グラフでは全体の中での構成比をみるときに利用します。

import matplotlib.pyplot as plt
labels = ["A", "B", "C", "D", "E"]
data = [54, 32, 18, 44, 29]
ex = [0.1, 0, 0, 0, 0]
# autopct="%1.1f%%"は小数点の表示桁数になります。1.1とすると1つ。1.2とすると2つになります。
# explodeオプションで1つめの要素を10%ずらしています。これにより少し目立たせることが可能です。
#counterclockオプションでFalseにするとリストの定義した順に表示になります。
# これがTrueになると反時計周りに円グラフの要素が構成されます。
plt.pie(data, explode=ex, labels=labels, autopct="%1.1f%%", counterclock=False)
plt.show()

labels = ["Python", "Ruby", "Java", "C++", "PHP"]
sizes  = [40, 12, 24, 16, 9]
colors =["navy", "yellow", "blue", "gold", "tomato"]
plt.pie(sizes, labels=labels, colors=colors)
plt.axis("equal") # この行を追加すると綺麗な円グラフが描けます。
plt.show()

ヒストグラム

ヒストグラムは、ある項目の散らばり具合(度数分布)を表す時に利用するグラフです。
ヒストグラムと棒グラフは似ているところがありますが、ヒストグラムには棒と棒の間に間隔がないという点とx軸はデータの区間で区切られており、連続したデータを示しているため、単純に複数の項目を比較する棒グラフと構成が違います。
hist()を使うことでヒストグラムを描画できます。
オプションには、binsやcolorなどがあり、棒の数を指定したり、棒の色を変えたりできます。

import matplotlib.pyplot as plt
import numpy as np

# 平均10、標準偏差10 の正規乱数を100件生成
x = np.random.normal(10, 10, 1000)

plt.hist(x)
# ヒストグラムを表示
plt.show()
# 引数にbins=数字でヒストグラムの棒の数を指定できます。
# plt.hist(x, bins=16)
# orientation="horizontal"を指定することで横棒として描画も可能です。

箱ひげ図

箱ひげ図 (box plot) は、データの分布や値のばらつきをわかりやすく表現するためのグラフです。
箱ひげ図は、最大値、最小値に加え、第一四分位数、第二四分位数、第三四分位数と呼ばれる四分位数の情報が含まれています。
描画するには、plt.boxplot()を利用します。

%matplotlib inline # Jupyter Notebookを利用している方のみ記述してください。
import matplotlib.pyplot as plt
import numpy as np

# ある10人の生徒の身長
math = [162, 168, 172, 181, 176, 168, 173, 175, 162, 169]
x = np.array(math)
plt.title('height')
plt.grid() # 横線ラインを入れることができます。

plt.boxplot(x)
plt.show()

"""
# 下記コードでも同様に描画可能です。

import matplotlib.pyplot as plt
# ある10人の生徒の身長
math = [162, 168, 172, 181, 176, 168, 173, 175, 162, 169]
# 箱ひげ図
fig, ax = plt.subplots()
bp = ax.boxplot(math)
plt.title('height')
plt.grid() # 横線ラインを入れることができます。
# 描画
plt.show()
"""

複数描画することもできます。 その際は、boxplot()の引数にタプルを利用します。

%matplotlib inline # Jupyter Notebookを利用している方のみ記述してください。
import matplotlib.pyplot as plt

# 数学の点数
math = [82, 75, 50, 73, 65, 95, 78, 93, 71, 83]
# 英語の点数
english = [77, 92, 62, 77, 64, 45, 28, 60, 37, 86]

# 点数のタプル
points = (math, english)

# 箱ひげ図
fig, ax = plt.subplots()


bp = ax.boxplot(points) # 複数指定する場合はタプル型で渡します。
ax.set_xticklabels(['math', 'english'])

plt.title('exam')
plt.grid() # 横線ラインを入れることができます。

# 描画
plt.show()

複数のグラフを描画する

複数のグラフを並べて配置するにはサブプロットに描画することで出来ます。
add_subplot関数を利用することで複数描画可能です。

まず、変数 = plt.figure()で図のインスタンス化を行います。
その後、add_subplot()することで実現可能です。
add_subplot関数に渡す引数に関してですが、add_subplot(行数, 列数, 番号) とします。

import matplotlib.pyplot as plt
x1, y1 = range(0, 5), [10,41, 44,29, 85]
x2, y2 = range(0, 5), [59,55,77,15,47]

fig = plt.figure()

# 1行2列の1番目
a1 = fig.add_subplot(1, 2, 1) # 第3引数の1は左側を意味しています
a1.bar(x1, y1)
a1.set_title("A")

a2 = fig.add_subplot(1, 2, 2) # 第3引数の2は右側を意味しています
a2.bar(x2, y2)
a2.set_title("B")

plt.show()

まとめ

この章では、Matplotlibでよく使うメソッドを見てきました。
Matplotlibは、グラフの描画やデータの可視化、折れ線グラフ、ヒストグラムや散布図など表現可能です。
手元のデータを可視化する時に必須のPythonライブラリですので使いこなせるようにしましょう。

演習問題

1 . NumPyやmathモジュールのsin()、cos()関数を使い、Sin波のグラフとCos波のグラフを描画してみてください。
NumPyなどのモジュールを使ってデータを作っていただいても他の方法でも構いません。

演習問題回答例

Pythonを効率よく学ぶには?

Pythonを効率よく学ぶには、普段からPythonを利用している現役のデータサイエンティストや機械学習エンジニアに質問できる環境で学ぶことです。
質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。受講料も業界最安値の35,000円(6ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。

オススメ記事