Python

Matplotlibで箱ひげ図を描画!初心者でもわかる完全ガイド

(最終更新月: 2024年11月)

✔こんな方におすすめの記事です

「箱ひげ図って何だろう?Pythonで描けないかな」
「Matplotlibで箱ひげ図を描きたいけど、方法がわからない」
「箱ひげ図の見方や使い方を知りたい」

✔当記事を通じて得られること

  • 箱ひげ図の基本的な概念と見方
  • Matplotlibを使った箱ひげ図の描き方
  • 実践的な箱ひげ図のカスタマイズ方法

当記事では、箱ひげ図の基礎知識からMatplotlibでの描画方法まで、実例を交えて幅広く解説していきます。
ぜひ最後までご覧ください。

箱ひげ図とは?データ分析の強い味方

箱ひげ図は、データの分布を視覚的に表現する統計的なグラフです。
データ分析において、数値の散らばり具合を理解するのに非常に役立つ手法なのです。

  • 箱ひげ図の基本構造
  • 箱ひげ図で表現できる統計値
  • 箱ひげ図を使うメリット

箱ひげ図の基本構造

箱ひげ図は、データの中央値、四分位数、外れ値などを一目で把握できる図です。
箱の中央にある線が中央値を表し、箱の上端と下端がそれぞれ第3四分位数と第1四分位数を示します。
例えば、100人分の身長データがあった場合、以下のような情報が一目でわかります。

import numpy as np
import matplotlib.pyplot as plt

# サンプルデータの生成
heights = np.random.normal(170, 5, 100)  # 平均170cm、標準偏差5の正規分布データ

# 箱ひげ図の描画
plt.boxplot(heights)
plt.ylabel('身長 (cm)')
plt.show()

箱ひげ図で表現できる統計値

箱ひげ図には、5つの重要な統計値が表示されます。
これらの値を理解することで、データの分布状況を詳しく把握できるようになります。
主な統計値は以下の通りです。

  • 最小値(ひげの下端)
  • 第1四分位数(箱の下端)
  • 中央値(箱の中の線)
  • 第3四分位数(箱の上端)
  • 最大値(ひげの上端)

箱ひげ図を使うメリット

箱ひげ図は、データの特徴を簡潔に表現できる優れたグラフです。
特に複数のデータセットを比較する際に威力を発揮します。
以下のような場面で効果的に活用できます。

  • データの分布の把握
  • 外れ値の検出
  • 複数グループの比較

Matplotlibを使った箱ひげ図の基本的な描き方

Matplotlibを使えば、簡単に箱ひげ図を描くことができます。
ここでは、基本的な描画方法について説明していきましょう。

  • シンプルな箱ひげ図の描き方
  • データの準備方法
  • 基本的なカスタマイズ

シンプルな箱ひげ図の描き方

Matplotlibでの箱ひげ図は、boxplotメソッドを使用して描画します。
最も基本的な使い方は、以下のようになります。

import matplotlib.pyplot as plt
import numpy as np

# データの準備
data = np.random.randn(100)

# 箱ひげ図の描画
plt.boxplot(data)
plt.show()

データの準備方法

箱ひげ図を描くためには、適切なデータ形式が必要です。
Matplotlibは、様々な形式のデータを受け付けることができます。
一般的なデータ形式は以下の通りです。

# リストを使用する場合
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# NumPy配列を使用する場合
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# Pandasのデータフレームを使用する場合
import pandas as pd
df = pd.DataFrame({'values': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})

基本的なカスタマイズ

箱ひげ図の見た目は、様々なパラメータで調整できます。
基本的なカスタマイズオプションを使って、グラフをより見やすくしましょう。
以下は主なカスタマイズ例です。

plt.boxplot(data,
    notch=True,  # ノッチを表示
    vert=True,   # 縦向きに表示
    patch_artist=True,  # 箱を塗りつぶす
    boxprops={'color': 'black', 'facecolor': 'lightblue'},  # 箱の色設定
    whiskerprops={'color': 'black'},  # ひげの色設定
    medianprops={'color': 'red'}  # 中央値線の色設定
)

複数の箱ひげ図を並べて比較する方法

複数のデータセットを比較することで、より深い分析が可能になります。
Matplotlibでは、複数の箱ひげ図を簡単に並べて表示できます。

  • 複数データの準備
  • グラフの配置方法
  • ラベルの付け方

複数データの準備

複数の箱ひげ図を描くには、データを適切に構造化する必要があります。
一般的には、リストやNumPy配列を使用します。
以下は、3つのグループのデータを準備する例です。

# 3つのグループのデータを生成
group1 = np.random.normal(100, 10, 100)
group2 = np.random.normal(120, 15, 100)
group3 = np.random.normal(90, 12, 100)

# データをリストにまとめる
data = [group1, group2, group3]

グラフの配置方法

複数の箱ひげ図を配置する際は、位置やスペースを適切に調整する必要があります。
Matplotlibでは、これらを簡単に設定できます。
以下のコードで、見やすい配置が実現できます。

# グラフのサイズを設定
plt.figure(figsize=(10, 6))

# 箱ひげ図を描画
plt.boxplot(data,
    positions=[1, 2, 3],  # 各箱の位置
    widths=0.7,  # 箱の幅
    patch_artist=True  # 箱を塗りつぶす
)

# グラフの範囲を設定
plt.xlim(0.5, 3.5)

ラベルの付け方

各箱ひげ図にラベルを付けることで、データの識別が容易になります。
ラベルは、x軸、y軸、タイトルなど、様々な場所に追加できます。
以下は、ラベルを追加する基本的な方法です。

plt.boxplot(data,
    labels=['Group A', 'Group B', 'Group C']  # 各箱のラベル
)
plt.xlabel('グループ')
plt.ylabel('値')
plt.title('グループ別の箱ひげ図比較')

箱ひげ図のスタイリングとカスタマイズ

見やすく美しい箱ひげ図を作るには、適切なスタイリングが重要です。
Matplotlibは、豊富なカスタマイズオプションを提供しています。

  • 色とスタイルの設定
  • グリッドと背景の調整
  • 凡例の追加

色とスタイルの設定

箱ひげ図の各要素に色やスタイルを設定することで、視認性が向上します。
特に、複数の箱ひげ図を比較する際は、色の使い分けが効果的です。
以下のコードで、カラフルな箱ひげ図が作成できます。

colors = ['lightblue', 'lightgreen', 'lightpink']
boxes = plt.boxplot(data, patch_artist=True)

# 各箱に色を設定
for box, color in zip(boxes['boxes'], colors):
    box.set_facecolor(color)
    box.set_edgecolor('black')

# ひげ、キャップ、外れ値の色を設定
plt.setp(boxes['whiskers'], color='black')
plt.setp(boxes['caps'], color='black')
plt.setp(boxes['medians'], color='red')
plt.setp(boxes['fliers'], marker='o', markerfacecolor='gray')

グリッドと背景の調整

グリッドや背景の設定は、データの読み取りやすさに大きく影響します。
適切な設定により、プロフェッショナルな印象のグラフが作成できます。
以下のコードで、見やすいグラフデザインが実現できます。

# グリッドの設定
plt.grid(True, axis='y', linestyle='--', alpha=0.7)

# 背景色の設定
plt.gca().set_facecolor('#f8f8f8')

# 枠線の設定
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

凡例の追加

複数の箱ひげ図を表示する際は、凡例があると理解が深まります。
Matplotlibでは、カスタマイズ可能な凡例を追加できます。
以下は、凡例を追加する基本的な方法です。

# 凡例用のダミープロットを作成
import matplotlib.patches as mpatches

legend_elements = [mpatches.Patch(facecolor=color, label=f'Group {i+1}')
                  for i, color in enumerate(colors)]

# 凡例を追加
plt.legend(handles=legend_elements, loc='upper right')

箱ひげ図の実践的な活用例

箱ひげ図は、様々なデータ分析シーンで活用できます。
実際のデータを使って、具体的な活用方法を見ていきましょう。

  • 学習データの分析
  • 売上データの可視化
  • 比較分析の実践

学習データの分析

テストスコアなどの学習データは、箱ひげ図で効果的に分析できます。
クラス間や科目間の比較が簡単にできるのが特徴です。
以下は、3つのクラスのテストスコアを比較する例です。

# テストスコアのデータを生成
class_a = np.random.normal(75, 10, 30)
class_b = np.random.normal(80, 8, 30)
class_c = np.random.normal(70, 12, 30)

plt.figure(figsize=(10, 6))
plt.boxplot([class_a, class_b, class_c],
    labels=['Class A', 'Class B', 'Class C'])
plt.ylabel('Test Score')
plt.title('Class Comparison of Test Scores')

売上データの可視化

月次や季節ごとの売上データも、箱ひげ図で効果的に表現できます。
外れ値や傾向を把握しやすいのが特徴です。
以下は、四半期ごとの売上を比較する例です。

# 四半期ごとの売上データを生成
q1_sales = np.random.normal(1000, 200, 90)
q2_sales = np.random.normal(1200, 250, 90)
q3_sales = np.random.normal(1500, 300, 90)
q4_sales = np.random.normal(1800, 350, 90)

plt.figure(figsize=(12, 6))
plt.boxplot([q1_sales, q2_sales, q3_sales, q4_sales],
    labels=['Q1', 'Q2', 'Q3', 'Q4'])
plt.ylabel('Sales (K¥)')
plt.title('Quarterly Sales Distribution')

比較分析の実践

異なるグループや条件間の比較分析も、箱ひげ図で効果的に行えます。
統計的な差異を視覚的に確認できるのが利点です。
以下は、異なる処理方法の効果を比較する例です。

# 処理効果のデータを生成
method1 = np.random.normal(85, 5, 50)
method2 = np.random.normal(90, 4, 50)
method3 = np.random.normal(88, 6, 50)

plt.figure(figsize=(10, 6))
plt.boxplot([method1, method2, method3],
    labels=['Method 1', 'Method 2', 'Method 3'],
    notch=True)
plt.ylabel('Effectiveness (%)')
plt.title('Comparison of Processing Methods')

まとめ

当記事では、Matplotlibを使用した箱ひげ図について学習してきました。

  • 箱ひげ図の基本的な概念と統計的な意味
  • Matplotlibを使った効果的な箱ひげ図の描画方法
  • 実践的なカスタマイズと活用例

箱ひげ図は、データ分析の強力なツールとして活用できます。
まずは、自分の持っているデータで箱ひげ図を描いてみましょう。
実践を重ねることで、より深い分析が可能になっていくはずです。