Диаграмма с областями (Area Plot) представляет тип визуализации данных, который отображает точки данных в виде цветных областей между линией (или линиями) и горизонтальной осью. Область между линией (линиями) и осью заполняется цветом, что позволяет визуально легко увидеть вклад различных категорий или компонентов в общее значение.
Для построения диаграммы с областями используются обе оси X и Y. Ось X обычно представляет время или категории, а ось Y - значения или пропорции данных. Заполненная область между линией (линиями) и осью X указывает на величину каждой категории или компонента. Эта область часто затеняется цветом, чтобы различать различные категории или компоненты.
Для построения диаграммы с областями в библиотеке Matplotlib применяться функция matplotlib.pyplot.stackplot() (либо функция Axes.stackplot()):
matplotlib.pyplot.stackplot(x, *args, labels=(), colors=None, hatch=None, baseline="zero", data=None, **kwargs)
Эта функция создает диаграмму с накоплением площадей (stacked area plot) или график потока (streamgraph). Через первый параметр - x передаются данные для оси X. Через последующие аргументы передаются данные для оси Y.
Это может быть один список или несколько списков (для нескольких групп/серий данных), где для каждого списка определяется своя область. Например:
stackplot(x, y) # где y имеет форму (M, N), например, y = [y1, y2, y3, y4] stackplot(x, y1, y2, y3, y4) # где y1, y2, y3, y4 имеют длину N
Из других параметров следует отметить параметр labels - список текстовых меток для каждой серии данных (например, для легенды диаграммы) и
параметр colors, через который передается список цветов для раскрашивания областей.
Рассмотрим небольшой пример:
import matplotlib.pyplot as plt
# тестовые данные для построения диаграммы
years = [1970, 1980, 1990, 2000, 2010, 2020]
# население трех стран по годам
indonezia = [119, 147, 179, 206, 237, 270]
brazil = [93, 119, 146, 169, 190, 203]
pakistan = [59, 80, 115, 154, 194, 227]
# создаем диаграмму с областями
plt.stackplot(years, indonezia, brazil, pakistan, labels=["Индонезия", "Бразилия", "Пакистан"], alpha=0.7)
plt.xlabel("Год")
plt.ylabel("Население")
plt.title("Население по годам")
plt.legend(loc="upper left")
plt.grid(True)
plt.show()
В данном случае мы рассматриваем население трех стран (а именно Индонезии, Бразилии и Пакистана) по годам с периодом в 10 лет. Соответствующие данные по населению сосредоточены в трех списках - indonezia, brazil, pakistan. Временные метки располагаются в списке years.
Для построения диаграммы передаем все эти списки (сначала список для оси X, затем все списки для оси Y) в функцию plt.stackplot(). А с помощью параметра labels устанавливаем
текстовые метки для трех стран для легенды диаграммы. В итоге у нас получится следующая диаграмма:
На диаграммах с наложенными областями несколько категорий или компонентов накладываются друг на друга для визуализации их совокупного эффекта. Это помогает понять, какой вклад каждая категория вносит в общее значение. Более широкие закрашенные области указывают на более высокие значения или пропорции внутри категории, при этом ширина пропорциональна величине данных. Направление движения закрашенных областей и наличие пиков или впадин могут выявлять закономерности и тенденции в данных. Восходящие области могут указывать на рост, а нисходящие - на снижение.
Для наложения областей в Matplotlib мы можем использовать функцию matplotlib.pyplot.fill_between():
matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
Фактически эта функция определяет кривые точками (x, y1) и (x, y2). Это создает один или несколько многоугольников, описывающих закрашенную область. Рассмотрим небольшой пример:
import matplotlib.pyplot as plt
# тестовые данные для построения диаграммы
years = [1970, 1980, 1990, 2000, 2010, 2020]
# население трех стран по годам
brazil = [93, 119, 146, 169, 190, 203]
pakistan = [59, 80, 115, 154, 194, 227]
# создаем диаграмму с областями
plt.fill_between(years, brazil, label="Бразилия", alpha=0.7)
plt.fill_between(years, pakistan, label="Пакистан", alpha=0.7)
plt.xlabel("Год")
plt.ylabel("Население")
plt.title("Население по годам")
plt.legend(loc="upper left")
plt.grid(True)
plt.show()
Здесь мы имеем те же самые данные по населелению только по двум странам. Для каждой серии данных (страны) определеяем свой вызов функции plt.fill_between(), где через список years
передаются данные для оси X, а через brazil/pakistan - данные для Y. Через параметр label для каждой серии данных указываем свою текстовую метку (для легенды диаграммы).
Таким образом, с помощью диаграммы мы увидим, что через какой-то момент население Пакистана стало превышать население Бразилии: