仕事や研究活動でデータをPythonで処理していると、
わかりやすくグラフ化したいと思ったことはありませんか?
Pythonのライブラリmatplotlibを使うことで、より分かりやすく、美しくデータを表現することができます。
僕は仕事で大量のデータを取り扱う機会があり、
今ではmatplotlibなしで仕事はできません・・・
この記事ではmatplotlibの基本的な使い方から応用例、代替ツールの紹介まで幅広く解説します。
データ可視化に興味がある方や、グラフの作成方法を知りたい方に
ぜひ読んでいただきたい内容となっています。
①Matplotlibについて知っておくべきこと

Matplotlibを使う上で最低限知って頂きたい内容を下にまとめました。
Matplotlibについて知っておくべきこと
- Matplotlibとは何か
- Matplotlibを使用するための前提知識
Matplotlibとは何か
MatplotlibはPython言語でデータを視覚化するためのライブラリで
グラフを描画するために最も広く使用されており、多くの分野で利用されています。
また、グラフの種類が豊富で、自由にカスタマイズできる点が特徴的です。
Matplotlibは様々なグラフを描画することが可能で、
豊富なカスタマイズオプションを備えているので、高度なグラフ作成に適しています。
また、MatplotlibはNumPy、SciPy、Pandasなどの
Pythonの科学技術ライブラリと互換性が高く、
これらのライブラリと組み合わせることで高度なデータ解析が可能となります。
Matplotlibを使用するための前提知識
NumPyの基礎知識
NumPyはPythonで数値計算を行うためのライブラリです。
Matplotlibを使用する場合、NumPyの基礎的な知識が必要になります。
例えば、NumPy配列を作成したり、配列の要素を操作する方法が必要です。
Pandasの基礎知識
PandasはPythonでデータを扱うためのライブラリです。
Matplotlibを使用する場合、データの前処理が必要な場合はPandasを使って、
データの読み込みや前処理を行う方法が必要です。
なので、Pandasの基礎的な知識が必要となります。
②Matplotlibの基本的な使い方

Matplotlibはグラフを描画するためのライブラリの一つで、折れ線グラフ、散布図、棒グラフ、ヒストグラム、円グラフなど様々な種類のグラフを描画することができます。
ここでは、Matplotlibを使用して基本的なグラフの描画方法を紹介します。
Matplotlibの基本的な使い方
- グラフを描画するための準備
- 折れ線グラフを描画する方法
- 散布図を描画する方法
- 棒グラフを描画する方法
- ヒストグラムを描画する方法
- 円グラフを描画する方法
- 3Dグラフを描画する方法
グラフを描画するための準備
Matplotlibをインストール
Matplotlibを使用するためには、通常はpipコマンドを使用してMatplotlibをインストールする必要があります。
ターミナルに、次のコマンドを実行します。
pip install matplotlib
Matplotlibを使用するためにはモジュールをインポートする必要があります。
以下のようにモジュールをインポートします。
import matplotlib.pyplot as plt
折れ線グラフを描画する方法
基本的な折れ線グラフの描画方法
折れ線グラフは時間や連続したデータの変化をグラフで表現する際によく使われます。

Matplotlibを使用して、折れ線グラフを描画するには、以下のようにplt.plot()関数を使用します。
import matplotlib.pyplot as plt
# データ
x = [1, 2, 3, 4, 5] # X軸の値
y = [10, 25, 18, 30, 15] # Y軸の値
# グラフのプロット
plt.plot(x, y)
# グラフの装飾
plt.title("Line graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
上記のコードはxとyにそれぞれX軸とY軸の値を指定し、
plt.plot()関数で折れ線グラフを作成しています。
その後、plt.title()、plt.xlabel()、plt.ylabel()関数を使用してグラフのタイトルや軸ラベルを設定しています。
最後に、plt.show()関数でグラフを表示します。
このように、matplotlibを使用すると簡単に折れ線グラフを作成できます。
点をプロットする方法

データ点を点でプロットすることもできます。
以下のように、'o'引数を使用して、点をプロットします。
import matplotlib.pyplot as plt
# データ
x = [1, 2, 3, 4, 5] # X軸の値
y = [10, 25, 18, 30, 15] # Y軸の値
# グラフのプロット
plt.plot(x, y, 'o')
# グラフの装飾
plt.title("Line graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
複数のグラフを同じプロットに表示する方法

import matplotlib.pyplot as plt
# データ
x = [1, 2, 3, 4, 5] # X軸の値
y1 = [10, 25, 18, 30, 15] # Y軸1の値
y2 = [5, 15, 10, 20, 8] # Y軸2の値
# グラフのプロット
plt.plot(x, y1, label='data1') # 折れ線グラフ1のプロット
plt.plot(x, y2, label='data2') # 折れ線グラフ2のプロット
# グラフの装飾
plt.title("Multiple line graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
plt.legend() # 凡例の表示
# グラフの表示
plt.show()
このプログラムではplt.plot()関数を2回呼び出しています。
それぞれの呼び出しで異なるY軸の値を指定しています。
また、label引数を使用してそれぞれの折れ線グラフにラベルを設定しています。
最後に、plt.legend()関数を使用して凡例を表示します。
これにより、各折れ線グラフのラベルが表示されます。
プログラムを実行すると、複数の折れ線グラフが同じプロットに表示されます。
それぞれのグラフは異なる色で表示され、凡例には各グラフのラベルが表示されます。
線の色を変更する方法

色を変更するにはplot関数の引数にcolorを指定します。
colorは英語の色名や、16進数表記のRGB値を指定できますが
以下の例では緑色に変更しています。
import matplotlib.pyplot as plt
# データ
x = [1, 2, 3, 4, 5] # X軸の値
y = [10, 25, 18, 30, 15] # Y軸の値
# グラフのプロット
plt.plot(x, y, color='green')
# グラフの装飾
plt.title("Line graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
線の種類を変更する方法

線の種類を変更するには、plot関数の引数にlinestyleを指定します。
linestyleは破線、点線などの種類を指定することができます。以下の例では、破線に変更しています。
※linestyle='dotted'に変更すると、点線になります。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 20)
plt.plot(x, np.sin(x), linestyle='dashed')
plt.show()
散布図を描画する方法
基本的な散布図の描画方法
散布図は2つの数値データの関係をグラフで表現するために使用されます。

散布図は2つの数値データの相関関係を可視化するために使用されるグラフです。
Matplotlibを使用すると簡単に散布図を描画することができます。
以下は、基本的な散布図の描画方法です。
import matplotlib.pyplot as plt
import numpy as np
# データの生成
N = 100 # データ数
x = np.random.randn(N) # X軸のランダムなデータ(正規分布に従う)
y = 2 * x + np.random.randn(N) # Y軸のデータ(Xに2を乗じた後、ノイズを加える)
# 散布図のプロット
plt.scatter(x, y) # alphaは点の透明度を指定
# グラフの装飾
plt.title("Scatter plot") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
このプログラムではnumpy.random.randn()関数を使用して、
平均0、標準偏差1の正規分布に従うランダムなデータを生成しています。
Nには生成するデータの数を指定しています。
xにはランダムなX軸のデータが格納されています。
yはX軸のデータに2乗した後に、平均0、標準偏差1の正規分布に従うノイズを加えたデータです。こうするとXとYの間に線形の相関が生まれます。
plt.scatter()関数を使用して、xとyのデータを散布図としてプロットしています。
最後にplt.title()、plt.xlabel()、plt.ylabel()などの関数を使用してグラフのタイトルや軸のラベルを設定し、plt.show()関数でグラフを表示します。
このプログラムを実行するとXとYの間に線形の相関がある散布図が描画されます。
データが直線状に分布していることが視覚的に確認できます。
色やマーカーの種類を変更する方法

散布図の色やマーカーの種類を変更することで、
データの特徴をより明確に表現することができます。
以下は、色やマーカーの種類を変更する方法です。
import matplotlib.pyplot as plt
import numpy as np
# データの生成
N = 100 # データ数
x = np.random.randn(N) # X軸のランダムなデータ(正規分布に従う)
y = 2 * x + np.random.randn(N) # Y軸のデータ(Xに2を乗じた後、ノイズを加える)
# 散布図のプロット
plt.scatter(x, y, color='red', marker='x') # alphaは点の透明度を指定
# グラフの装飾
plt.title("Scatter plot") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
colorで散布図の色を指定して、次にmarkerでマーカーの種類を指定しています。
上記の例では、赤色のxマーカーで散布図を描画しています。
棒グラフを描画する方法
基本的な棒グラフの描画方法
棒グラフは複数のデータを比較する際に用いられます。

棒グラフはデータの大小関係を比較するために使用されるグラフです。
以下は基本的な棒グラフの描画方法です。
import matplotlib.pyplot as plt
# データ
x = ['A', 'B', 'C', 'D', 'E'] # X軸のカテゴリ
y = [25, 18, 30, 15, 22] # Y軸の値
# 棒グラフのプロット
plt.bar(x, y)
# グラフの装飾
plt.title("Bar graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
xにカテゴリ名、yにそれぞれのカテゴリに対応する値をリストで指定します。
plt.bar()関数を使用して、xとyのデータを棒グラフとしてプロットします。
その後、plt.title()、plt.xlabel()、plt.ylabel()などの関数を使用してグラフのタイトルや軸のラベルを設定します。
最後にplt.show()関数でグラフを表示します。
色や幅を変更する方法

棒グラフの棒の幅や色も簡単に変更できます。
棒の幅を変更するにはwidth引数を使用し、
棒の色を変更するにはcolor引数を使用します。
以下は、widthとcolorを使用して、棒グラフの幅と色を変更する例です。
import matplotlib.pyplot as plt
# データ
x = ['A', 'B', 'C', 'D', 'E'] # X軸のカテゴリ
y = [25, 18, 30, 15, 22] # Y軸の値
# 棒グラフのプロット
plt.bar(x, y, width=0.5, color='orange')
# グラフの装飾
plt.title("Bar graph") # グラフのタイトル
plt.xlabel("Xaxis") # X軸のラベル
plt.ylabel("Yaxis") # Y軸のラベル
# グラフの表示
plt.show()
この例では、widthを0.5に設定して棒の幅を変更し、
colorをorangeに設定して棒の色を変更しています。
※幅は任意の数値に変更できます。
ヒストグラムを描画する方法
基本的なヒストグラムを描画する方法
ヒストグラムはデータを一定の区間に分割し、
それぞれの区間に含まれるデータの個数を表現するグラフです。

ヒストグラムはデータを区間ごとに分けて、それぞれデータの数を表すグラフです。
ヒストグラムを作成するにはhist()関数を使用します。
以下はhist()関数を使用してヒストグラムを描画する例です。
import matplotlib.pyplot as plt
import numpy as np
# 平均が50、標準偏差が10の正規分布に従う乱数を生成
data = np.random.normal(50, 10, 1000)
plt.hist(data, bins=20, alpha=0.5, color='green')
plt.xlabel('Xaxis')
plt.ylabel('Yaxis')
plt.title('Histogram')
plt.show()
このプログラムは平均が50、標準偏差が10の正規分布に従う乱数を生成して、
ヒストグラムを描画しています。
bins引数を使用してデータ区間数を指定し、alpha引数を使用して透明度を設定します。
円グラフを描画する方法
基本的な円グラフを描画する方法
円グラフはデータを円形に分割し、それぞれの項目の割合を表現するグラフです。

円グラフは、データの構成比を円形に表現するグラフです。
円グラフの基本的な描画方法は、以下のようになります。
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [20, 30, 15, 10, 25]
# 円グラフを描画
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title("Pie chart")
plt.show()
グラフの要素となるラベルをlabelsリストに、
それぞれの要素のサイズ(割合)をsizesリストに定義します。
plt.pie()関数を使って円グラフを描画します。
sizesを値として渡し、labelsをラベルとして渡します
上記の例では、autopct='%1.1f%%'としています。
%1.1f%%はフォーマット指定子で、小数点以下1桁で各要素の割合を表示します。
%%はパーセント記号を表示するためのエスケープシーケンスです。
このようにautopctパラメータを使用して各要素の値を円グラフに追記することができます。
ラベルの色を変更する方法

円グラフは各要素のラベルや色を変更することができます。
ラベルはlabels引数で指定し、色はcolors引数で指定します。
以下のようにコードを書くことで、各要素のラベルと色を変更することができます。
import matplotlib.pyplot as plt
labels = ['A', 'B', 'C', 'D', 'E']
sizes = [20, 30, 15, 10, 25]
colors = ['red', 'green', 'blue', 'yellow', 'purple']
# 円グラフを描画
plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors)
plt.title("Pie chart")
plt.show()
3Dグラフを描画する方法
基本的な3Dグラフを描画する方法

matplotlibを使用すると簡単に3Dグラフを描画することができます。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
# データの作成
x = np.linspace(-5, 5, 100) # X軸の値
y = np.linspace(-5, 5, 100) # Y軸の値
# Z軸の計算
X, Y = np.meshgrid(x, y)
Z = np.exp(-(X**2 + Y**2) / 10) # 2次元のガウス関数を例として使用
# 3Dグラフの作成
fig = plt.figure()
ax = plt.axes(projection='3d')
# 3Dグラフの描画
ax.plot_surface(X, Y, Z, cmap='viridis')
# 軸ラベルとタイトルの設定
ax.set_xlabel('Xaxis')
ax.set_ylabel('Yaxis')
ax.set_zlabel('Zaxis')
ax.set_title('3D graph')
# グラフの表示
plt.show()
このプログラムは2次元のガウス関数を使用して3Dグラフを描画する例です。
まずX軸とY軸の値を作成し、それを使用してZ軸の値を計算します。
次にplt.figure()を使用してFigureオブジェクトを作成し、
mplot3d.Axes3Dオブジェクトを作成します。
ax.plot_surface()
関数を使用して3Dグラフを描画し、
ax.set_xlabel()やax.set_ylabel()などのメソッドを使用して軸ラベルとタイトルを設定します。
最後に、plt.show()でグラフを表示します。
このプログラムを実行すると、2次元のガウス関数に基づいた立体的なグラフが表示されます。
③Matplotlibの高度な使い方

MatplotlibはPythonのデータ可視化ライブラリの中でも非常に優秀で、
複数のグラフを配置したりグラフの装飾やアニメーションをカスタマイズすることができます。
ここでは、Matplotlibの高度な使い方について紹介します。
Matplotlibの高度な使い方
- 複数のグラフを配置する方法
- グラフの装飾方法
- グラフのサイズをカスタマイズ
複数のグラフを配置する方法
subplotを使ったグラフの配置方法

subplotを使うとグラフを1つの図に並べて表示することができます。
subplotの引数には、行数、列数、プロット番号を指定します。
import matplotlib.pyplot as plt
import numpy as np
# x軸の値を生成
x = np.linspace(0, 2*np.pi, 100)
# y軸の値を生成(sin関数を使用)
y = np.sin(x)
# グラフ全体のレイアウトを設定
plt.subplot(2, 1, 1) # 2行1列の1番目のサブプロットを作成
plt.plot(x, y) # 折れ線グラフを作成
plt.title('subplot example1') # グラフのタイトルを設定
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
plt.subplot(2, 2, 3) # 2行2列の3番目のサブプロットを作成
plt.plot(x, y, 'red') # 折れ線グラフを作成(赤色)
plt.title('subplot example2') # グラフのタイトルを設定
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
plt.subplot(2, 2, 4) # 2行2列の4番目のサブプロットを作成
plt.plot(x, y, 'green') # 折れ線グラフを作成(緑色)
plt.title('subplot example3') # グラフのタイトルを設定
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
plt.tight_layout() # グラフのレイアウトを調整
plt.show() # グラフを表示
x軸とy軸のデータを生成します。
x = np.linspace(0, 2*np.pi, 100)は
0から2πまでの範囲を等間隔に区切った100個の値を生成してxに代入します。
y = np.sin(x)はxの値に対してsin関数を適用して、対応するy軸の値を生成します。
plt.subplot()関数を使用してサブプロットを作成しています。
subplot()関数の引数は、行数、列数、および現在のサブプロットの番号です。2行1列の1番目のサブプロットを作成する場合は、plt.subplot(2, 1, 1)のように指定します。
各サブプロットに異なる色を適用するために、
plt.plot()関数の3番目の引数に色を指定しています。
このプログラムを実行するとサブプロットが表示され、
2つ目のサブプロットには赤色、3つ目のサブプロットには緑色のグラフが表示されます。
plt.tight_layout()でグラフのレイアウトを調整し、重なりや被りを最小限にします。
gridspecを使ったグラフの配置方法

gridspecを使うと行と列の数を指定してグラフを配置できます。
これにより、グラフを複数のセルに分割することが可能になります。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
# x軸の値を生成
x = np.linspace(0, 2*np.pi, 100)
# y軸の値を生成(sin関数)
y = np.sin(x)
# グリッド仕様を作成
gs = gridspec.GridSpec(2, 2)
# サブプロット1を作成
plt.subplot(gs[0, 0])
plt.plot(x, y)
plt.title('gridspec example1')
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
# サブプロット2を作成
plt.subplot(gs[0, 1])
plt.plot(x, np.cos(x), 'red')
plt.title('gridspec example2')
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
# サブプロット3を作成
plt.subplot(gs[1, :])
plt.plot(x, np.tan(x), 'green')
plt.title('gridspec example3')
plt.xlabel('xaxis') # x軸のタイトル
plt.ylabel('yaxis') # y軸のタイトル
plt.tight_layout() # グラフのレイアウトを調整
plt.show() # グラフを表示
gs = gridspec.GridSpec(2, 2)は2行2列のグリッド仕様を作成します。
plt.subplot(gs[0, 0])でグリッド仕様の(0, 0)の位置にサブプロットを作成します。
plt.subplot(gs[1, :])は2行目の全列に対応するサブプロットを作成することを指します。
plt.tight_layout()でグラフのレイアウトを調整し、重なりや被りを最小限にします。
plt.show()でプロットされたグラフを表示します。
ヒートマップを描画する方法

ヒートマップはデータの密度や関係性を視覚的に表現するために用いられるグラフの一つです。
imshow関数を使ってヒートマップを描画することができます。
この関数は行列を入力として受け取り、値の大きさに応じた色の濃淡を使って行列の各要素を描画するものです。
import numpy as np
import matplotlib.pyplot as plt
# データの作成
data = np.random.rand(10, 10) # 10x10のランダムなデータ
# ヒートマップの描画
plt.imshow(data, cmap='hot')
# カラーバーの表示
plt.colorbar()
# グラフの表示
plt.show()
imshow()関数を使用してデータをヒートマップとして描画しています。
cmapパラメータを使用してカラーマップを指定しています(上記の例では'hot'カラーマップを使用していますが、他のカラーマップも利用可能です)。
ヒートマップのカラーバーを表示するためにcolorbar()関数を呼び出しています。
最後にshow()関数を使用してグラフを表示します。
実行するとランダムなデータのヒートマップが表示され,
各データの値に対応したカラーマップに基づいて色が割り当てられます。
グラフの装飾方法
Matplotlibを使ってグラフを描画するだけでなく、
グラフを見やすくするために様々な装飾を加えることができます。
主な装飾の方法はグラフのタイトルやラベルを付ける、凡例を表示する、
軸の範囲やラベルを設定する、背景色やグリッド線を設定する、
テキストなどを描画する方法があります。
軸の範囲を設定する方法
軸範囲を設定にはxlim()関数またはylim()関数を使用します。
軸ラベルを設定するにはxlabel()関数またはylabel()関数を使用します。
例えば以下のコードは、x軸の範囲を0から10に、y軸の範囲を-1から1に設定して
x軸とy軸にラベルを追加しています。
import matplotlib.pyplot as plt
import numpy as np
# データの作成
x = np.arange(0, 10, 0.1)
y = np.sin(x)
# グラフの描画
plt.plot(x, y)
# 軸範囲の設定
plt.xlim(0, 10)
plt.ylim(-1, 1)
# 軸ラベルの設定
plt.xlabel('x')
plt.ylabel('y')
plt.show()
背景色やグリッド線を設定する方法

グラフの背景色やグリッド線を設定できます。
例えば、以下のコードは、グラフの背景色を黄色に、グリッド線を表示しています。
import matplotlib.pyplot as plt
import numpy as np
# データの作成
x = np.arange(0, 10, 0.1)
y = np.sin(x)
# グラフの描画
plt.plot(x, y)
# 背景色の設定
plt.gca().set_facecolor('yellow')
# グリッド線の設定
plt.grid(True)
plt.show()
plt.gca()関数は現在のAxesオブジェクト(グラフの領域)を取得するための関数です。.set_facecolor()メソッドを使って、グラフの背景色を黄色に設定しています。
リッド線を設定するには、grid()関数を使用します。
テキストを記入する方法

グラフ上にテキストを描画することができます。
テキストを描画するにはtext()メソッドを使用します。
例えば、以下のようにしてグラフの中央に
"Matplotlib"というテキストを描画することができます。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [2, 4, 3])
ax.text(2, 3, "Matplotlib!", fontsize=12, ha="center")
グラフのサイズをカスタマイズ
プロットサイズを設定する方法

グラフのサイズをカスタマイズすることができます。
グラフのサイズを変更するにはfigureオブジェクトを生成してサイズを設定します。
以下は8x4インチのサイズでグラフを描写する例です。
import matplotlib.pyplot as plt
# グラフのサイズを変更する
fig = plt.figure(figsize=(8, 4))
# グラフを描画する
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
plt.plot(x, y)
plt.show()
問題なく実行できれば上のようなグラフが描画されます。
※他で紹介したグラフより少し大きいはずです。
④Matplotlibの代替ツールの紹介

データ可視化にはMatplotlibが有名ですが、
他に様々なライブラリがあります。
ここではその中でも代表的な3つのライブラリ、Seaborn、Plotly、Bokehなどがあります。
下の記事で解説してます。
-
-
PythonのSeabornで美しくデータを可視化する方法!
続きを見る
-
-
基礎編: PythonとPlotlyを使ったデータの可視化
続きを見る
-
-
応用編: PythonとPlotlyを使ったデータの可視化
続きを見る
Pythonのライブラリmatplotlibを使ったデータ可視化のについて紹介させて頂きました。
matplotlibは多くの種類のグラフを描画できるので、ビジネスや研究など、
さまざまなシーンで役立てばと思います。
今回は以上です。