matplotlibのグラフスケールを一括統一!再利用可能な関数を自作する方法
データ分析では、スケール統一が必要なユースケースがあります。
前回紹介したy
軸を0
から追加拡張させ、グラフのスケール統一機能を実装で、
より正確で効果的なデータ分析をしましょう。
目次
スケール統一が必要なユースケース
同一指標により複数のグラフを比較する際は、スケールを統一することが重要です。
たとえば、以下のような状況では特に注意が必要です:
- 複数ブランドの評価指標の比較
- 異なる時期の顧客満足度の比較
- 店舗間の売上推移の比較
スケールが統一されていないと、以下のような問題が発生します:
- 視覚的な誤解を招く
- データの相対比較が困難
本記事のゴール
matplotlib
を使って再利用可能な自作関数を作成します。
matplotlib
では、統一的に設定ができない
┌─────────────────────────────────────┐matplotlib
では、plt.plot()
や plt.bar()
などでグラフを描画するたびに、 ylim()
や plt.yticks()
を毎回指定するという手間
└─────────────────────────────────────┘
│
│
▼
┌─────────────────────────────────────┐
全体を通して統一的に設定を行う方法
└─────────────────────────────────────┘
matplotlib
では、plt.plot()
や plt.bar()
などでグラフを描画するたびに、
ylim()
や plt.yticks()
を毎回指定する必要があり、手間が生じます。
この作業を簡略化し、全体を通して統一的に設定を行うたいところです。
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_max | 100 | y軸の最大値 |
y_tick | 20 | y軸の目盛幅 |
**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()
結果
以下が出力されたグラフの例です。
スケールが統一されていることが確認できます。
このように、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
など)を選択
まとめ
スケールを統一することで、より正確で効果的なデータ比較が可能になります。
データの性質を考慮しながら、適切なスケール設定を心がけましょう。