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/11ad1a9b3865f188dace54094ef237bcae31dc553bfc27793ca750a913d968de.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/d2a7be66ae38373ea40a2f3dfeca65ff193401d9d032f52c1fbe2e1e86784809.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/6f20077baa13148447782a193384431b43207b5ed0d278cf17c2d3a65a9d79ce.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/5c97c140583f42ad26346a35559f339dd6e40705d92593e1edea6d1b6934f086.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/083125689d09bd154c8627f73c86077e3225e5b964bdaafe941564e83cf59185.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/3ce5306b27b0612acf490916be521f90af328b7bfb122e1caeb659b75b04d39a.png