Matplotlib グラフに線分・直線を引く#

※記事内に商品プロモーションを含むことがあります。

公開日

Matplotlibのグラフ上に線分・直線を表示する方法を解説します。

線分・直線を表示するには、グラフのAxesオブジェクト (ax) のメソッドを使用します。

  • 座標を指定する線分: ax.vlines(), ax.hlines()

  • グラフの表示領域に対する割合を指定する線分・直線: ax.axvline(), ax.axhline()

vは縦方向 (vertical), hは横方向 (horizontal) を意味します。

線の座標を指定して補助線を引くような場合や、複数の線をまとめて引く場合はvlines, hlinesが適しています。 一方、グラフを2つに区切るように線を引く場合、axvline, axhlineが適しています。

各メソッドの解説と例を以下に示します。

縦方向の線分 vlines#

ax.vlines()は任意の本数の縦方向の線分を引く関数です。 主な引数は以下の通りです。

ax.vlines(x, ymin, ymax, colors=None, linestyles="solid")
  • x: float or array-like 縦線のx座標

  • ymin: float or array-like 縦線の下側のy座標

  • ymax: float or array-like 縦線の上側のy座標

  • colors: 線の色

  • linestyles: 線の種類

線分を1本だけ引く例を以下に示します。 x座標は1.5, y座標は-1から5としています。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.vlines(1.5, -1, 5)
plt.show()
../_images/45be6f6068ed3e1e397ea09f75f9b28037844f7bc756c49b9fb6f79e6f8f44bd.png

次に、縦線を2本引く例を示します。x座標などをリスト形式で与えています。

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.vlines(x=[1.5, 2.5], ymin=[-1, 0], ymax=[5, 6], colors="green")
plt.show()
../_images/2546fa431be8641932db3d7c42bf52b7feeb1eef216b3645b5af2fc4fe3fda96.png

横方向の線分 hlines#

ax.hlines()は任意の本数の横方向の線分を引く関数です。 主な引数は以下の通りです。

ax.hlines(y, xmin, xmax, colors=None, linestyles="solid")
  • y: float or array-like 横線のy座標

  • xmin: float or array-like 横線の左側のx座標

  • xmax: float or array-like 横線の右側のx座標

  • colors: 線の色

  • linestyles: 線の種類

線分を1本だけ引く例を以下に示します。 y座標は1.5, x座標は0から4としています。

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.hlines(y=1.5, xmin=0, xmax=4)
plt.show()
../_images/25bb559ed6dafa404a398b0e43306addea41c07b3125ece6e42f8ee26bbda325.png

縦方向の線分 axvline#

ax.axvline()は縦方向の線分を引く関数です。 線分のy座標をグラフの表示領域に対する割合で指定します。 主な引数は以下の通りです。

ax.axvline(x=0, ymin=0, ymax=1, **kwargs)
  • x: float 縦線のx座標

  • ymin: float 縦線の下側の位置

  • ymax: float 縦線の上側の位置

ymin, ymaxには、グラフの縦方向の表示領域に対する相対位置を、0から1の間の値で指定します。 0のときはグラフの一番下、1のときはグラフの一番上となります。

デフォルト値のymin=0, ymax=1の場合、以下のようにグラフの下から上まで縦線が引かれます。

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.axvline(x=1.5)
plt.show()
../_images/fb73d165e8e758b6f07b5befa0dd6f9ab53e75eeff0609a51252314cbbfeeb83.png

また、以下のようにymin=0.1, ymax=0.7とすると、グラフの下側から10%~70%の位置まで線が引かれます。

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.axvline(x=1.5, ymin=0.1, ymax=0.7)
plt.show()
../_images/bf616c965828310abb4aa4b255c19bc9660acc72bb828454da28f67830577f77.png

横方向の線分 axhline#

ax.axhline()は横方向の線分を引く関数です。 線分のx座標をグラフの表示領域に対する割合で指定します。 主な引数は以下の通りです。

ax.axhline(y=0, xmin=0, xmax=1, **kwargs)
  • y: float 横線のy座標

  • xmin: float 横線の下側の位置

  • xmax: float 横線の上側の位置

xmin, xmaxには、グラフの横方向の表示領域に対する相対位置を、0から1の間の値で指定します。 0のときはグラフの一番左、1のときはグラフの一番右となります。

デフォルト値のxmin=0, xmax=1の場合、以下のようにグラフの左から右まで縦線が引かれます。

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 3, 2])
ax.axhline(y=1.5)
plt.show()
../_images/1ee46dfbbd5d8bbb1e853d4434501d5462eda9652a4b18ec68c9e687bf1eed1a.png