【Matplotlib】指定範囲を塗り潰す方法

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

指定範囲を塗り潰す関数

Axes には特定の範囲を塗りつぶす axvspan()、axhspan()、fill_between() メソッドが備わっています。

matplotlib.axes.Axes.axvspan()

Axes.axvspan(xmin, xmax) を使うと、x=xmin から x=xmax までの範囲を塗り潰すことができます。

# MATPLOTLIB_FILL_AXVSPAN

# In[1]

import numpy as np
import matplotlib.pyplot as plt

# FigureとAxesを作成
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)

# 軸範囲を設定
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

# 3≦x≦6の範囲を塗り潰す
ax.axvspan(3, 6, color="coral")

plt.show()

垂直方向の塗りつぶし01
オプション引数 ymin と ymax で垂直方向の塗り潰し範囲を指定できますが、Axes.set_ylim() の設定内容に関わらず、0~1 の相対座標で指定します。

# In[2]

# FigureとAxesを作成
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)

# 軸範囲を設定
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

# 0≦x≦6,2≦y≦6の範囲を塗り潰す
ax.axvspan(3, 6, 0.2, 0.6, color="coral")

plt.show()

垂直方向の塗り潰し02

matplotlib.axes.Axes.axhspan()

 Axes.axhspan(ymin, ymax) は y=ymin から y=ymax までの範囲を塗り潰します。

# MATPLOTLIB_FILL_AXHSPAN

# In[1]

import numpy as np
import matplotlib.pyplot as plt

# FigureとAxesを作成
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)

# 軸範囲を設定
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

# 4≦y≦8の範囲を塗り潰す
ax.axhspan(4, 8, color="olive", alpha=0.5)

plt.show()

水平方向の塗り潰し01
オプション引数 xmin と xmax で水平方向の塗り潰し範囲を指定できますが、Axes.set_xlim() の設定内容とは無関係に、0~1 の相対座標で指定することになります。

# In[2]

# FigureとAxesを作成
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111)

# 軸範囲を設定
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

# 2≦x≦8,4≦y≦8の範囲を塗り潰す
ax.axhspan(4, 8, 0.2, 0.8, color="olive", alpha=0.5)

plt.show()

水平方向の塗り潰し02

matplotlib.axes.Axes.fill_between()

Axes.fill_between(x, y1, y2) は (x, y1) と (x, y2) の間を塗り潰します。この関数は 2 つの曲線 $y=f(x)$ と $y=g(x)$ に囲まれた領域を図示する場合などに用いられます。以下に例として、$\sin x$ と $\cos x$ に囲まれた領域を図示するコードを掲載します。

# MATPLOTLIB_FILL_BETWEEN

# In[1]

import numpy as np
import matplotlib.pyplot as plt

# 円周率を定義
pi = np.pi

# プロットするデータを用意
x = np.arange(0, 3*pi, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)

# FigureとAxesの設定
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)
ax.grid()
ax.set_xlabel("x", fontsize=14)
ax.set_ylabel("y", fontsize=14)
ax.set_xlim(0.0, 2 * pi)
ax.set_ylim(-1.5, 1.5)
ax.set_xticks([0, pi/2, pi, 3*pi/2, 2*pi])
ax.set_xticklabels(["0", "$\pi/2$", "$\pi$", "$3\pi/2$", "$2\pi$"],
                   fontsize=12)

# Axesにグラフをプロット
ax.plot(x, y1, color="blue")
ax.plot(x, y2, color="red")

# y1とy1の間をライム色で塗り潰す
ax.fill_between(x, y1, y2, facecolor='lime', alpha=0.5)

plt.show()

matplotlib.axes.Axes.fill_between

コメント

  1. HNaito より:

    塗りつぶしも使いこなしたい機能ですね。grid が隠れないのが助かります。
    調べたら Axes.fill_between( ) は塗りつぶす範囲も指定できるようなので、利用できる場面が増えそうです。

    • あとりえこばと より:

      where 引数で塗りつぶす x の範囲を指定できますね。
      ぜひ活用してください (^^)