本記事では、PythonでMatplotlibの基本的な使い方を解説します。データ可視化は分析において重要なステップであり、Matplotlibは最も広く使われているグラフ描画ライブラリです。この記事を読むことで、Matplotlibを使った基本的なグラフ作成方法を習得できます。
Matplotlibとは
Matplotlibは科学計算やデータ分析において高品質なグラフを作成するための豊富な機能を提供するPythonのデータ可視化ライブラリです。
Matplotlibの主な特徴は以下の通りです。
- 多様なグラフタイプ(折れ線グラフ、棒グラフ、散布図、ヒストグラムなど)をサポート
- 高度なカスタマイズが可能
- 複数のバックエンド(表示方法)をサポート
- NumPy、pandas、SciPyなどの他のPythonライブラリとの連携が容易
- 出力形式としてPNG、PDF、SVG、EPSなど多様なフォーマットに対応
使い方
Matplotlibを使うには、まずインストールが必要です。以下のコマンドでインストールできます。
pip install matplotlib
最も基本的な折れ線グラフを描画する例を以下に示します。
import matplotlib.pyplot as plt
import numpy as np
# データの準備
x = np.linspace(0, 10, 100) # 0から10までの範囲で100点のデータを生成
y = np.sin(x) # サイン関数
# グラフの描画
plt.figure(figsize=(8, 4)) # グラフのサイズを指定
plt.plot(x, y) # 折れ線グラフを描画
plt.title('Sine Function') # タイトルを設定
plt.xlabel('x') # x軸のラベルを設定
plt.ylabel('sin(x)') # y軸のラベルを設定
plt.grid(True) # グリッドを表示
plt.show() # グラフを表示
# 出力: サイン関数のグラフが表示される

プロットのタイプ
Matplotlibでは様々なタイプのグラフを描画できます。以下に代表的なプロットタイプを紹介します。
折れ線グラフ
時系列データや連続的な変化を表現するのに適した折れ線グラフを描画する例です。 折れ線グラフはplt.plot()
関数を使用して描画します。
パラメータ | 説明 |
---|---|
x, y | プロットするデータの座標 |
color | 線の色(blueやredなどの色名や#FF0000などのカラーコード) |
linestyle | 線のスタイル(-実線、–破線、:点線など) |
linewidth | 線の太さ |
marker | データポイントのマーカー(o円、s四角、^三角など) |
label | 凡例に表示するラベル |
import matplotlib.pyplot as plt
import numpy as np
# データの準備
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 折れ線グラフの描画
plt.figure(figsize=(10, 5))
plt.plot(x, y1, label='sin(x)', color='blue')
plt.plot(x, y2, label='cos(x)', color='red', linestyle='--')
plt.legend() # 凡例を表示
plt.title('Sine and Cosine Functions') # 英語タイトル
plt.xlabel('x') # 英語x軸ラベル
plt.ylabel('y') # 英語y軸ラベル
plt.grid(True)
plt.show()

散布図
2つの変数間の関係を点で表現する散布図を描画する例です。 散布図はplt.scatter()
関数を使用して描画します。
パラメータ | 説明 |
---|---|
x, y | プロットするデータの座標 |
s | マーカーのサイズ(デフォルトは36) |
c | マーカーの色 |
alpha | 透明度(0.0〜1.0) |
marker | マーカーの形状(デフォルトはo) |
edgecolors | マーカーの輪郭の色 |
import matplotlib.pyplot as plt
import numpy as np
# ランダムデータの生成
np.random.seed(42) # 再現性のために乱数シードを設定
x = np.random.rand(50)
y = x + np.random.normal(0, 0.2, 50) # xに少しノイズを加える
# 散布図の描画
plt.figure(figsize=(8, 6))
plt.scatter(x, y, alpha=0.7, s=100, c='green') # alpha: 透明度、s: 点のサイズ、c: 色
plt.title('Scatter Plot Example') # 英語タイトル
plt.xlabel('x') # 英語x軸ラベル
plt.ylabel('y') # 英語y軸ラベル
plt.grid(True)
plt.show()

棒グラフ
カテゴリデータの比較を表現する棒グラフを描画する例です。 棒グラフはplt.bar()
関数を使用して描画します。
パラメータ | 説明 |
---|---|
x | 棒の位置(カテゴリ) |
height | 棒の高さ(値) |
width | 棒の幅(デフォルトは0.8) |
color | 棒の色 |
edgecolor | 棒の輪郭の色 |
alpha | 透明度(0.0〜1.0) |
align | 棒の位置合わせ(centerまたはedge) |
import matplotlib.pyplot as plt
import numpy as np
# データの準備
categories = ['Category A', 'Category B', 'Category C', 'Category D', 'Category E']
values = [25, 40, 30, 55, 15]
# 棒グラフの描画
plt.figure(figsize=(10, 6))
plt.bar(categories, values, color='skyblue', edgecolor='navy')
plt.title('Values by Category') # 英語タイトル
plt.xlabel('Category') # 英語x軸ラベル
plt.ylabel('Value') # 英語y軸ラベル
plt.ylim(0, 60) # y軸の範囲を設定
plt.grid(axis='y') # y軸方向のみグリッドを表示
plt.show()

ヒストグラム
データの分布を視覚化するヒストグラムを描画する例です。 ヒストグラムはplt.hist()
関数を使用して描画します。
パラメータ | 説明 |
---|---|
x | ヒストグラムを作成するデータ |
bins | ビン(区間)の数または配列 |
range | データの範囲(最小値、最大値) |
density | Trueの場合、確率密度関数として表示 |
alpha | 透明度(0.0〜1.0) |
color | ヒストグラムの色 |
edgecolor | ヒストグラムの輪郭の色 |
import matplotlib.pyplot as plt
import numpy as np
# 正規分布に従うランダムデータの生成
np.random.seed(42)
data = np.random.normal(0, 1, 1000) # 平均0、標準偏差1の正規分布から1000点のデータを生成
# ヒストグラムの描画
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, alpha=0.7, color='purple', edgecolor='black')
plt.title('Normal Distribution Histogram') # 英語タイトル
plt.xlabel('Value') # 英語x軸ラベル
plt.ylabel('Frequency') # 英語y軸ラベル
plt.grid(True)
plt.show()

各種設定
Matplotlibでは、グラフを見やすくするための様々な設定が可能です。
タイトルとラベル
グラフのタイトルや軸のラベルを設定して、グラフの内容を明確に伝える例です。 タイトルはplt.title()
、x軸ラベルはplt.xlabel()
、y軸ラベルはplt.ylabel()
関数を使用して設定します。
関数 | パラメータ | 説明 |
---|---|---|
plt.title() | fontsize | フォントサイズ |
fontweight | フォントの太さ(normal、boldなど) | |
color | テキストの色 | |
plt.xlabel() | fontsize | フォントサイズ |
plt.ylabel() | fontweight | フォントの太さ |
color | テキストの色 |
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = x ** 2
plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.title('Quadratic Function Graph', fontsize=16) # 英語タイトルとフォントサイズを設定
plt.xlabel('x', fontsize=12) # 英語x軸ラベルとフォントサイズを設定
plt.ylabel('y', fontsize=12) # 英語y軸ラベルとフォントサイズを設定
plt.show()

凡例
複数のデータを一つのグラフに表示し、凡例を使って各データを識別できるようにする例です。 凡例はplt.legend()
関数を使用して表示します。
パラメータ | 説明 |
---|---|
loc | 凡例の位置(best、upper left、lower rightなど) |
fontsize | フォントサイズ |
frameon | Trueの場合、凡例の周りにフレームを表示 |
title | 凡例のタイトル |
shadow | Trueの場合、凡例に影をつける |
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = x
y2 = x**2
y3 = x**3
plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='Linear Function') # 英語ラベル
plt.plot(x, y2, label='Quadratic Function') # 英語ラベル
plt.plot(x, y3, label='Cubic Function') # 英語ラベル
plt.legend(loc='upper left', fontsize=12) # 凡例の位置とフォントサイズを設定
plt.title('Various Function Graphs') # 英語タイトル
plt.grid(True)
plt.show()

軸の範囲設定
グラフの軸の範囲を明示的に設定し、データの特定の部分に焦点を当てる例です。 x軸の範囲はplt.xlim()
、y軸の範囲はplt.ylim()
関数を使用して設定します。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-5, 5, 100)
y = x**2
plt.figure(figsize=(8, 6))
plt.plot(x, y)
plt.xlim(-3, 3) # x軸の範囲を-3から3に設定
plt.ylim(0, 5) # y軸の範囲を0から5に設定
plt.title('Quadratic Function with Limited Axis Range') # 英語タイトル
plt.grid(True)
plt.show()

グリッド
グリッドを表示してデータ点の値を読み取りやすくする例です。 グリッドはplt.grid()
関数を使用して表示します。
パラメータ | 説明 |
---|---|
b | Trueの場合、グリッドを表示(デフォルトはTrue) |
axis | グリッドを表示する軸(both、x、y) |
linestyle | グリッド線のスタイル(-、–、:など) |
linewidth | グリッド線の太さ |
alpha | グリッド線の透明度(0.0〜1.0) |
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title('Sine Function with Grid') # 英語タイトル
plt.grid(True, linestyle='--', alpha=0.7) # 点線のグリッドを透明度0.7で表示
plt.show()

SeabornとMatplotlibの違い
MatplotlibとSeabornはどちらもPythonのデータ可視化ライブラリですが、いくつかの重要な違いがあります。
- 抽象化レベル: SeabornはMatplotlibの上に構築されており、より高レベルの抽象化を提供します。Matplotlibは低レベルの制御を可能にする一方、Seabornは少ないコードでより洗練されたグラフを作成できます。
- デフォルトのスタイル: Seabornはデフォルトで美しく、現代的なスタイルを提供します。Matplotlibのデフォルトスタイルはより基本的です。
- 統計機能: Seabornは統計的な可視化に特化しており、箱ひげ図、バイオリンプロット、ペアプロットなどの統計グラフを簡単に作成できます。
- データフレーム統合: SeabornはPandasのデータフレームと緊密に統合されており、データフレームから直接グラフを作成するための便利な関数を提供しています。
同じデータをMatplotlibとSeabornで可視化する例です。
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# データの準備
np.random.seed(42)
data = pd.DataFrame({
'Group': np.repeat(['A', 'B', 'C', 'D'], 25),
'Value': np.random.randn(100) * 10 + 50
})
# Matplotlibでの箱ひげ図
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
groups = data.groupby('Group')
labels, values = [], []
for label, group in groups:
labels.append(label)
values.append(group['Value'].values)
# Matplotlibで箱ひげ図を描画するコード
plt.boxplot(values, labels=labels) # plt.boxplot()関数を使用
plt.title('Box Plot with Matplotlib') # 英語タイトル
plt.grid(True)
# Seabornでの箱ひげ図
plt.subplot(1, 2, 2)
# Seabornで箱ひげ図を描画するコード
sns.boxplot(x='Group', y='Value', data=data) # sns.boxplot()関数を使用
plt.title('Box Plot with Seaborn') # 英語タイトル
plt.grid(True)
plt.tight_layout()
plt.show()

まとめ
本記事では、PythonのMatplotlibライブラリの基本的な使い方について解説しました。Matplotlibは非常に柔軟で強力なデータ可視化ツールであり、様々なタイプのグラフを作成できます。
主なポイントをまとめると以下の通りです。
- Matplotlibは多様なグラフタイプをサポートするPythonの標準的なデータ可視化ライブラリです
- 基本的な使い方はimport matplotlib.pyplot as pltでライブラリをインポートし、plt.plot()などの関数でグラフを描画します。
- 折れ線グラフ(plt.plot())、散布図(plt.scatter())、棒グラフ(plt.bar())、ヒストグラム(plt.hist())など様々なプロットタイプが利用可能です
- タイトル(plt.title())、ラベル(plt.xlabel(), plt.ylabel())、凡例(plt.legend())、軸の範囲(plt.xlim(), plt.ylim())、グリッド(plt.grid())などの設定でグラフをカスタマイズできます
- より高度な統計的可視化にはSeabornを検討するとよいでしょう
データ可視化はデータ分析の重要な部分であり、Matplotlibはその基礎となるライブラリです。この記事で紹介した基本を習得した後は、より複雑なグラフや、複数のサブプロットを組み合わせた図の作成にも挑戦してみてください。