matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

データ分析では、スケール統一が必要なユースケースがあります。

前回紹介したy軸を0から追加拡張させ、グラフのスケール統一機能を実装で、
より正確で効果的なデータ分析をしましょう。

matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

スケール統一が必要なユースケース

スケール統一が必要なユースケース

同一指標により複数のグラフを比較する際は、スケールを統一することが重要です。

たとえば、以下のような状況では特に注意が必要です:

  • 複数ブランドの評価指標の比較
  • 異なる時期の顧客満足度の比較
  • 店舗間の売上推移の比較

スケールが統一されていないと、以下のような問題が発生します:

  • 視覚的な誤解を招く
    • データの相対比較が困難

本記事のゴール

matplotlib を使って再利用可能な自作関数を作成します。

matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

matplotlibでは、統一的に設定ができない

┌─────────────────────────────────────┐
matplotlibでは、plt.plot()plt.bar() などでグラフを描画するたびに、   
ylim()plt.yticks() を毎回指定するという手間
└─────────────────────────────────────┘
              │
              │
              ▼
┌─────────────────────────────────────┐
  全体を通して統一的に設定を行う方法      
└─────────────────────────────────────┘

matplotlibでは、plt.plot()plt.bar() などでグラフを描画するたびに、

ylim()plt.yticks() を毎回指定する必要があり、手間が生じます。

この作業を簡略化し、全体を通して統一的に設定を行うたいところです。

matplotlib を拡張して自作関数を作成

matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

グラフのスケールを統一するためには、必須の3つの要素があります。
これらを一括して設定できる自作関数を作成すれば、効率的かつ正確な視覚化が実現します。

スケール統一の必須三要素

要素説明
最小値(bottom通常0からスタート。前回紹介したy軸を0から開始する基本設定に該当。ylim(bottom=0)
最大値(topデータの最大値に応じて設定します。ylim(top=100)
目盛幅(tick読みやすい間隔で設定。数値が分かりやすく見えるように工夫します。yticks(range(0, 101, 10))

自作関数plot_unified_scaleのコード

以下はスケール統一を行うための自作関数 plot_unified_scale のコードです。

import matplotlib.pyplot as plt # matplotlibを使うための準備

def plot_unified_scale(x, y, y_max, y_tick, **kwargs):
    plt.plot(x, y, **kwargs)
    plt.ylim(bottom=0, top=y_max)  # 最小値と最大値を設定
    plt.yticks(range(0, y_max + 1, y_tick))  # 目盛幅を設定し、最大値を含める

自作関数plot_unified_scaleの引数一覧:

以下に、plot_unified_scale関数で使用可能な引数とその説明を表形式でまとめました。

この表を参考にして、用途に応じた適切な設定を行ってください。

引数名デフォルト値説明
x必須x軸のデータを指定
y必須y軸のデータを指定
y_max100y軸の最大値
y_tick20y軸の目盛幅
**kwargsなしこの関数で受け取ったキーワード引数は、plt.plot にそのまま渡されます。渡した引数は plt.plot が解釈し、色やスタイル、その他の設定に適用されます。

自作関数plot_unified_scaleの運用方法

以下に示す2つのコードを実行した結果、スケールが統一されたグラフが得られます。
データAとデータBを同じスケールでプロットすることで、正確な比較が可能になります。

手順
グラフを作成するたびに、自作関数plot_unified_scaleを呼び出すだけで簡単にスケール統一が実現できます。

データAのプロット

plot_unified_scale(
    x=[1, 2, 3],  # xデータ
    y=[65, 45, 80],  # yデータ
    y_max=100,  # 最大値を100に統一
    y_tick=10   # 10刻みの目盛り
)

データBのプロット

plot_unified_scale(
    x=[1, 2, 3],  # xデータ
    y=[45, 75, 60],  # yデータ
    y_max=100,  # 最大値を100に統一
    y_tick=10   # 10刻みの目盛り
)
plt.show()

結果

matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法

以下が出力されたグラフの例です。

スケールが統一されていることが確認できます。

このように、plot_unified_scaleを活用することで、複数のデータセットを同じスケールで視覚的に比較しやすくなります。

効率的な分析のために、ぜひ試してみてください!

理解の助け:主題外ですが、ちょっことプログラミングの話

plt.yticks(range(0, y_max + 1, y_tick))は、なぜ、+ 1??
import matplotlib.pyplot as plt # matplotlibを使うための準備

def plot_unified_scale(x, y, y_max, y_tick, **kwargs):
    plt.plot(x, y, **kwargs)
    plt.ylim(bottom=0, top=y_max)  # 最小値と最大値を設定
    plt.yticks(range(0, y_max + 1, y_tick))  # 目盛幅を設定し、最大値を含める

range 関数では、指定した範囲の「終点(stop)」は含まれないという仕様があります。

そのため、range(0, y_max, y_tick) の場合、y_max(最大値)は目盛りに含まれません。

このように、「+ 1」を加えるのは range の終点を最大値として含めたい」ためです。

詳細解説に関して

今回の記事では、前回の記事と重複するコードや基本的な仕組みの解説を省略しています。
特に、自作関数の構造(def matplotlib の仕組み)について詳しく知りたい方は、ぜひ前回の記事をご参照ください。

分析上のスケール設定の注意点は?

効果的なグラフ表示のために、以下の点に注意が必要です:

  • データの特性に応じた適切なスケール範囲の選択
  • 極端な値の差がある場合は別グラフでの表示を検討
  • 目盛幅は読みやすい数値(5,10,20など)を選択

まとめ

スケールを統一することで、より正確で効果的なデータ比較が可能になります。

データの性質を考慮しながら、適切なスケール設定を心がけましょう。