matplotlibでy軸を0から固定する方法

「matplotlibでy軸を0から固定するためのPythonコードと解説を示した技術記事。コードサンプルとその実行結果、実践的な応用例を含む」

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でy軸を0から固定するためのPythonコードと解説を示した技術記事。コードサンプルとその実行結果、実践的な応用例を含む」

このように、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.plotplt.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です。

「matplotlibでy軸を0から固定するためのPythonコードと解説を示した技術記事。コードサンプルとその実行結果、実践的な応用例を含む」



たとえば、以下のように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から固定するためのPythonコードと解説を示した技術記事。コードサンプルとその実行結果、実践的な応用例を含む」

複数の店舗間でデータを比較する場合などです。

同じスケールで比較することで、解釈ミスを防ぎ、より正確な分析が可能になります。

注意事項

拡張しすぎには注意が必要です。

関数が複雑になると保守が難しくなり、エラーの原因になる可能性があります。

そのため、必要最小限の機能に絞りつつ、コードの柔軟性を損なわない範囲で拡張することを心がけましょう。

「matplotlibでy軸を0から固定するためのPythonコードと解説を示した技術記事。コードサンプルとその実行結果、実践的な応用例を含む」

まとめと次のステップ

matplotlibのグラフ描画において、y軸を0から始める設定を解説しました。
自作関数を作成することで設定を簡略化し、全体を通して統一的に設定を行う方法を紹介しました。

本記事では、折れ線グラフのplt.plotを例に解説しましたが、
棒グラフのplt.barなどにおいても同様の手順で適用できます。

次のステップとして、以下を試してみてください:

  • 実際に自作関数を作成し、他のmatplotlib設定も組み込んでみる。
  • グラフ描画における課題を整理し、自作関数で解決できる部分を探してみる。

ぜひ、自分の用途に合った拡張方法を探求し、データ可視化のスキルを高めてください!