(最終更新月: 2024年11月)
✔こんな方におすすめの記事です
「Matplotlibで異なる単位のデータを1つのグラフに表示したい」
「2軸グラフの作り方がわからない」
「Matplotlibで見やすいグラフを作成したい」
✔当記事を通じて得られること
- Matplotlibで2軸グラフを作成する基本的な方法
- 2軸グラフのカスタマイズ方法とデザイン調整のコツ
- 実践的な2軸グラフの作成例とよくあるエラーの解決法
当記事では、Matplotlibによる2軸グラフの基本的な作成方法から応用的なテクニックまで、実例を交えて幅広く解説していきます。
ぜひ最後までご覧ください。
2軸グラフとは何か?基本を理解しよう
2軸グラフについて、その基本的な概念と特徴を説明します。
データ分析や可視化において、異なる単位や範囲のデータを1つのグラフで表現したいときに重宝するからです。
- 2軸グラフの基本的な概念
- 2軸グラフが必要な場面
- 2軸グラフのメリット・デメリット
2軸グラフの基本的な概念
2軸グラフとは、左右のY軸に異なる目盛りを持たせることができるグラフです。
例えば、気温(℃)と降水量(mm)のように、単位の異なるデータを1つのグラフで表現できます。
以下は、2軸グラフの基本的な特徴です。
- 左右で異なる単位のデータを表示
- 2種類のY軸スケールを設定可能
- X軸は共通で使用
2軸グラフが必要な場面
2軸グラフは、以下のような場面で特に有用です。
異なる単位のデータを比較する必要があるときに、データの関係性を視覚的に理解しやすくなります。
具体的な例として以下のようなケースが挙げられます。
- 売上高と利益率の推移
- 気温と湿度の変化
- 株価と出来高の関係
2軸グラフのメリット・デメリット
2軸グラフを使用する際は、そのメリットとデメリットを理解しておく必要があります。
メリットとしては、異なるスケールのデータを1つのグラフで表現できることが挙げられます。
一方で、軸のスケールによってはデータの関係性を誤解させる可能性もあるので注意が必要です。
Matplotlibで2軸グラフを作成する基本手順
Matplotlibを使って2軸グラフを作成する基本的な手順を説明します。
まずは簡単な例から始めて、徐々に応用的な内容に進んでいきましょう。
- 基本的なコードの構造
- 軸の設定方法
- データのプロット方法
基本的なコードの構造
Matplotlibで2軸グラフを作成するための基本的なコード構造は以下のとおりです。
import matplotlib.pyplot as plt
import numpy as np
# データの準備
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = x**2
# グラフの作成
fig, ax1 = plt.subplots()
ax2 = ax1.twinx() # 2つ目の軸を作成
# データのプロット
ax1.plot(x, y1, color='blue', label='sin(x)')
ax2.plot(x, y2, color='red', label='x^2')
plt.show()
軸の設定方法
2軸グラフでは、それぞれの軸に適切な設定を行うことが重要です。
以下のコードで、軸のラベルやスケールを設定できます。
# 軸ラベルの設定
ax1.set_xlabel('X軸')
ax1.set_ylabel('左のY軸', color='blue')
ax2.set_ylabel('右のY軸', color='red')
# 軸の色を設定
ax1.tick_params(axis='y', labelcolor='blue')
ax2.tick_params(axis='y', labelcolor='red')
データのプロット方法
データをプロットする際は、それぞれの軸に対して適切なデータを割り当てる必要があります。
以下のような方法で、異なるタイプのプロットを組み合わせることもできます。
# 線グラフと棒グラフの組み合わせ
ax1.bar(x, y1, color='blue', alpha=0.3)
ax2.plot(x, y2, color='red', linewidth=2)
2軸グラフのカスタマイズ方法
2軸グラフをより見やすく、効果的に表現するためのカスタマイズ方法を解説します。
適切なカスタマイズにより、データの視認性と理解のしやすさが大きく向上します。
- グラフスタイルの設定
- 凡例の配置
- 軸の範囲とグリッド設定
グラフスタイルの設定
グラフのスタイルを設定することで、より見やすい可視化が可能になります。
# スタイルの設定
plt.style.use('seaborn')
# 線の色とスタイルの設定
ax1.plot(x, y1, color='#1f77b4', linestyle='-', linewidth=2)
ax2.plot(x, y2, color='#ff7f0e', linestyle='--', linewidth=2)
凡例の配置
2軸グラフでは、凡例の適切な配置が特に重要です。
# 凡例の設定
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
軸の範囲とグリッド設定
軸の範囲とグリッドを適切に設定することで、データの関係性がより明確になります。
# 軸の範囲設定
ax1.set_ylim(-2, 2)
ax2.set_ylim(0, 100)
# グリッドの設定
ax1.grid(True, alpha=0.3)
実践的な2軸グラフの作成例
実際のデータを使用して、2軸グラフの作成例を紹介します。
より実践的な例を通じて、応用力を身につけていきましょう。
- 気温と降水量のグラフ
- 株価と出来高のグラフ
- 売上高と利益率のグラフ
気温と降水量のグラフ
気象データを使用した2軸グラフの作成例を示します。
import pandas as pd
# サンプルデータの作成
dates = pd.date_range('2023-01-01', '2023-12-31', freq='M')
temp = [5, 6, 10, 15, 20, 25, 28, 29, 25, 20, 15, 8]
rain = [50, 60, 80, 100, 150, 200, 180, 160, 140, 100, 70, 55]
fig, ax1 = plt.subplots(figsize=(12, 6))
ax2 = ax1.twinx()
# データのプロット
ax1.plot(dates, temp, color='red', marker='o', label='気温')
ax2.bar(dates, rain, color='blue', alpha=0.3, label='降水量')
# グラフの設定
ax1.set_xlabel('月')
ax1.set_ylabel('気温 (℃)', color='red')
ax2.set_ylabel('降水量 (mm)', color='blue')
株価と出来高のグラフ
株式市場のデータを可視化する例を示します。
# 株価データのサンプル
dates = pd.date_range('2023-01-01', '2023-12-31', freq='B')
price = np.random.normal(1000, 50, len(dates))
volume = np.random.normal(50000, 10000, len(dates))
fig, ax1 = plt.subplots(figsize=(12, 6))
ax2 = ax1.twinx()
# データのプロット
ax1.plot(dates, price, color='green', label='株価')
ax2.bar(dates, volume, color='gray', alpha=0.3, label='出来高')
売上高と利益率のグラフ
ビジネスデータの可視化例を示します。
# ビジネスデータのサンプル
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
sales = [100, 120, 140, 160, 180, 200]
profit_rate = [15, 16, 18, 17, 19, 20]
fig, ax1 = plt.subplots(figsize=(10, 6))
ax2 = ax1.twinx()
# データのプロット
ax1.bar(months, sales, color='blue', alpha=0.3, label='売上高')
ax2.plot(months, profit_rate, color='red', marker='o', label='利益率')
よくあるエラーと解決方法
2軸グラフ作成時によく発生するエラーとその解決方法を解説します。
初心者がつまずきやすいポイントを中心に説明していきます。
- 軸のスケール関連のエラー
- 凡例の重複問題
- データ型の不一致エラー
軸のスケール関連のエラー
軸のスケールに関連するエラーは最も一般的な問題です。
# スケールの自動調整
ax1.set_ylim(auto=True)
ax2.set_ylim(auto=True)
# データの正規化
def normalize_data(data):
return (data - np.min(data)) / (np.max(data) - np.min(data))
凡例の重複問題
凡例が重複して表示される問題の解決方法を示します。
# 凡例の重複を避ける
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='best')
plt.legend().remove() # 重複した凡例を削除
データ型の不一致エラー
データ型の不一致によるエラーの解決方法です。
# データ型の変換
x = np.array(x, dtype=float)
y1 = np.array(y1, dtype=float)
y2 = np.array(y2, dtype=float)
まとめ
当記事では、Matplotlibを使用した2軸グラフの作成について学習してきました。
- 2軸グラフの基本概念と作成方法を理解
- グラフのカスタマイズと見やすい可視化の方法を習得
- 実践的な例を通じて応用力を身につけた
これらの知識を活かして、ぜひ自分のデータで2軸グラフを作成してみてください。
最初は難しく感じるかもしれませんが、練習を重ねることで確実にスキルアップできます。
データの可視化は、分析結果を効果的に伝えるための重要なスキルなので、しっかりと身につけていきましょう。