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()

次に、縦線を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()

横方向の線分 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()

縦方向の線分 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()

また、以下のように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()

横方向の線分 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()
