5.4. Fill - закрашенный многоугольник

Этот тип графика очень похож на график линии - с помощью двух массивов мы задаем координаты точек, затем концы линии соединяются отрезком и вся область внутри этой замкнутой линии закрашивается. Вот и все.

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

Давайте сначала нарисуем график линии небольшого массива точек:

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

x = [1, 3, 4, 5, 7]
y = [2, 4, 3, 4, 2]

fig, ax = plt.subplots()

ax.plot(x, y)

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

plt.show()

Matplotlib fill: линия многоугольника без закрашивания внутренней области

А теперь отобразим тот же набор точек с помощью метода fill:

import numpy as np
import matplotlib.pyplot as plt

x = [1, 3, 4, 5, 7]
y = [2, 4, 3, 4, 2]


fig, ax = plt.subplots()

ax.fill(x, y)

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

plt.show()

Matplotlib fill: линия многоугольника и закрашенная внутренняя область

Как видите - это действительно просто линия с соединенными концами и закрашенной внутренней областью. Методу fill можно передавать несколько наборов данных:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 100)

x = np.sin(t)
y1 = np.cos(t)
y2 = np.cos(t)/2
y3 = np.cos(t)/4

fig, ax = plt.subplots()

ax.fill(x, y1, x + 2, y2, x + 4, y3)

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

plt.show()

Matplotlib fill: закрашивание нескольких областей

Указанная линия может пересекать сама себя:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 500)

fig, axes = plt.subplots(2, 2)

x = np.sin(4*t) - np.cos(t/2)
y = np.sin(t/2) - np.cos(2*t)
axes[0][0].fill(x, y, color = 'r',
                fill = False)
axes[0][1].fill(x, y, color = 'r')

x = np.sin(4*t) - np.cos(t/2)
y = np.sin(t/2) - np.cos(4*t)
axes[1][0].fill(x, y,
                color = 'r',
                fill = False)
axes[1][1].fill(x, y,
                color = 'r')

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

plt.show()

Matplotlib fill: закрашивание области многоугольника, линия которого пересекает сама себя