matplotlibでy軸を0から固定する方法
matplotlib
を使ったデータ可視化では、設定を簡略化することで作業効率が大幅に向上します。
本記事では、y
軸を0
から始める設定を効率よく行う方法と、その応用について解説します。
y
軸を0
から表示させたい場合、毎回ylim(bottom=0)
などと指定しなければならない手間が生じます。
この作業を簡略化し、全体を通して統一的に設定を行う方法が求められます。
┌──────────────────────────────┐
添付毎回、ylim(bottom=0)
などと指定しなければならない手間
└──────────────────────────────┘
│
│
▼
┌────────────────────────────┐
全体を通して統一的に設定を行う方法
└────────────────────────────┘
本記事では、折れ線グラフのplt.plotを例に解説しましたが、
棒グラフのplt.barなどにおいても同様の手順で適用できます。
目次
matplotlib
の関数を拡張して自作関数を作成
matplotlib
の関数を拡張して自作関数を作成することで、この課題を解決できます。y
軸を0
から始める際の課題を解決できます。
この自作関数を使うことで、毎回、ylim(bottom=0)
を記述する必要がなくなり、コードが簡潔になります。
以下がコードです。説明は順を追って後述します。
import matplotlib.pyplot as plt #グラフ描画のために pyplot モジュールをインポートしています。
def plot_with_zero_bottom(x, y, **kwargs):
plt.plot(x, y, **kwargs)
plt.ylim(bottom=0)
# 利用例
y1 = [200, 250, 300, 350, 400] # データ設定
y2 = [180, 230, 290, 330, 380] # データ設定
# グラフを描画
plot_with_zero_bottom(y1, y2)
plt.show()
自作関数が骨格
import matplotlib.pyplot as plt #グラフ描画のために pyplot モジュールをインポートしています。
def plot_with_zero_bottom(x, y, **kwargs):
plt.plot(x, y, **kwargs)
plt.ylim(bottom=0)
# 利用例
y1 = [200, 250, 300, 350, 400] # データ設定
y2 = [180, 230, 290, 330, 380] # データ設定
# グラフを描画
plot_with_zero_bottom(y1, y2)
plt.show()
matplotlib
という既存関数をベースにして、自作関数を作成しているイメージです。
平たく言うと、既存関数の拡張です。plot_with_zero_bottom
は以下のような動作を行います。
plt.plot
を呼び出してグラフを描画。plt.ylim(bottom=0)
でy軸の下限を0
に固定。
このように、matplotlib
の複数の関数を組み合わせて自作の関数を作成します。
1つの自作関数で2つの関数を呼び出しているイメージです。
「下限」のため、キーワード引数がbottomというわけですね
理解の助け:主題外ですが、簡単に触れておきます
def
は新しい関数を定義します
def plot_with_zero_bottom(x, y, **kwargs):
plt.plot(x, y, **kwargs)
plt.ylim(bottom=0)
def
を使用して新しい関数を定義します。plot_with_zero_bottom
という関数の中で、plt.plot(x, y, **kwargs)
とplt.ylim(bottom=0)
が実行される処理内容として定義されています。
この関数は明示的な戻り値(return文)を持ちませんが、グラフの描画自体が目的なので問題ありません。
matplotlib
がすべて同じキャンバスに描画を追加していく仕組み
plot_with_zero_bottom
の内部でplt.plot
とplt.ylim
を呼び出している理由は、matplotlib
がすべて同じキャンバスに描画を追加していく仕組みだからです。
この仕組みによって、個別の設定を簡略化しつつ、必要な描画設定を柔軟に適用できます。
自作関数plot_with_zero_bottom
の使用法
import matplotlib.pyplot as plt #グラフ描画のために pyplot モジュールをインポートしています。
def plot_with_zero_bottom(x, y, **kwargs):
plt.plot(x, y, **kwargs)
plt.ylim(bottom=0)
# 利用例
y1 = [200, 250, 300, 350, 400] # データ設定
y2 = [180, 230, 290, 330, 380] # データ設定
# グラフを描画
plot_with_zero_bottom(y1, y2)
plt.show()
上記のコードでは、シンプルなデータを用意して、自作関数plot_with_zero_bottom
をテストしています。
x軸に[1, 2, 3]
、y軸に[4, 5, 6]
を設定してグラフを描画し、y軸の下限が0
から始まることを確認できます。
追拡張で汎用性を高める
本記事で紹介した問題を解決するだけでなく、さらに拡張することで汎用性を高めることができます。
既存関数、メソッド、新しいコード等を記述すればOKです。
たとえば、以下のようにx軸の範囲やグラフタイトルも設定できるようにします。
import matplotlib.pyplot as plt #グラフ描画のために pyplot モジュールをインポートしています。
def plot_plus(x, y, title='', xlim=None, **kwargs):
plt.plot(x, y, **kwargs)
plt.ylim(bottom=0)
if xlim:
plt.xlim(xlim)
if title:
plt.title(title)
# 利用例
plot_plus([1, 2, 3], [4, 5, 6], title='sample graph', xlim=(0, 5))
plt.show()
このような拡張を行うことで、グラフを一括して同じスケールで比較する場合などに便利です。
複数の店舗間でデータを比較する場合などです。
同じスケールで比較することで、解釈ミスを防ぎ、より正確な分析が可能になります。
注意事項
拡張しすぎには注意が必要です。
関数が複雑になると保守が難しくなり、エラーの原因になる可能性があります。
そのため、必要最小限の機能に絞りつつ、コードの柔軟性を損なわない範囲で拡張することを心がけましょう。
まとめと次のステップ
matplotlib
のグラフ描画において、y
軸を0
から始める設定を解説しました。
自作関数を作成することで設定を簡略化し、全体を通して統一的に設定を行う方法を紹介しました。
本記事では、折れ線グラフのplt.plot
を例に解説しましたが、
棒グラフのplt.bar
などにおいても同様の手順で適用できます。
次のステップとして、以下を試してみてください:
- 実際に自作関数を作成し、他の
matplotlib
設定も組み込んでみる。 - グラフ描画における課題を整理し、自作関数で解決できる部分を探してみる。
ぜひ、自分の用途に合った拡張方法を探求し、データ可視化のスキルを高めてください!