Matplotlibで2軸グラフを作成する方法!初心者向けに基礎から徹底解説

※本サイトにはプロモーション・広告が含まれています。

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

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

「Matplotlibで異なる単位のデータを1つのグラフに表示したい」
「2軸グラフの作り方がわからない」
「Matplotlibで見やすいグラフを作成したい」

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

  • Matplotlibで2軸グラフを作成する基本的な方法
  • 2軸グラフのカスタマイズ方法とデザイン調整のコツ
  • 実践的な2軸グラフの作成例とよくあるエラーの解決法

当記事では、Matplotlibによる2軸グラフの基本的な作成方法から応用的なテクニックまで、実例を交えて幅広く解説していきます。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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軸グラフを作成してみてください。

最初は難しく感じるかもしれませんが、練習を重ねることで確実にスキルアップできます。

データの可視化は、分析結果を効果的に伝えるための重要なスキルなので、しっかりと身につけていきましょう。

タイトルとURLをコピーしました