5.5. Fill_between - закрашенная область между линиями

Этот тип графика очень похож на график fill с одним отличием - закрашивается область между двумя указанными линиями.

Несколько примеров

В простейшем случае, для создания графика, нужно передать методу fill три массива: x - массив с x координатами точек обеих линий и два массива y1, y2 с y координатами точек первой и второй линии:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x = np.linspace(0, 10, 10)

y1 = 2*x
y2 = x
ax.fill_between(x, y1, y2)

y3 = 1.5*x + 10
y4 = 4*x + 10
ax.fill_between(x, y3, y4)

fig.set_figwidth(12)    #  ширина и
fig.set_figheight(6)    #  высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')

plt.show()

Matplotlib fill_between: закрашенная область между линиями

Указанные линии могут пересекать друг друга:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 100)
y1 = x**2
y2 = x**2 - 20*np.cos(x)

fig, ax = plt.subplots()

ax.fill_between(x, y1, y2)

fig.set_figwidth(12)    #  ширина и
fig.set_figheight(6)    #  высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')

plt.show()

Matplotlib fill_between: закрашенная область между линиями, которые пересекают друг друга

Причем, если линии пересекаются, то с помощью параметра where можно указать выше или ниже какой линии должна закрашиваться область, а с помощью параметра facecolor можно задать ее цвет:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-12, 12, 200)
y1 = x**2
y2 = x**2 - 40*np.cos(x)

fig, ax = plt.subplots()

ax.plot(x, y1, color = 'r', linewidth = 3)
ax.plot(x, y2, color = 'b', linewidth = 3)

ax.fill_between(x, y1, y2,
                where= (y2 > y1),
                facecolor='yellow')
ax.fill_between(x, y1, y2,
                where= (y2 < y1),
                facecolor='black')

fig.set_figwidth(12)    #  ширина и
fig.set_figheight(6)    #  высота "Figure"

plt.show()

Matplotlib fill_between: закрашенные разным цветом области между двумя линиями

Можно управлять цветом и другими параметрами линии, а так же устанавливать прозрачность всей области:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 3*np.pi, 100)
y1 = np.cos(x)
y2 = np.sin(x)

fig, ax = plt.subplots()

ax.fill_between(x, y1, 2*y1 + 1,
                facecolor='r',
                alpha = 0.5,
                color = 'black',    #  цвет линий
                linewidth = 2,      #  ширина линий
                linestyle = '--')   #  начертание линий
ax.fill_between(x, y2, 3*y2,
                facecolor='g',
                alpha = 0.5,
                color = 'black',
                linewidth = 2,
                linestyle = '--')

fig.set_figwidth(12)    #  ширина и
fig.set_figheight(6)    #  высота "Figure"
fig.set_facecolor('floralwhite')
ax.set_facecolor('seashell')

plt.show()

Matplotlib fill_between: изменение внешнего вида линий и области между ними