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設定も組み込んでみる。 - グラフ描画における課題を整理し、自作関数で解決できる部分を探してみる。
ぜひ、自分の用途に合った拡張方法を探求し、データ可視化のスキルを高めてください!

