Создание диаграммы Санки с использованием Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы научимся использовать класс Sankey из модуля matplotlib.sankey для создания длинной цепи связей с использованием Python Matplotlib.

Советы по работе с ВМ

После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки и модули

Начнем с импорта необходимых библиотек и модулей. Будем использовать matplotlib.pyplot и matplotlib.sankey.

import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey

Определяем количество связей с каждой стороны

Далее определяем количество связей с каждой стороны в нашей цепи. В этом примере установим его равным 6.

links_per_side = 6

Определяем функцию side

Теперь определяем функцию side, которая генерирует боковую цепь.

def side(sankey, n=1):
    """Generate a side chain."""
    prior = len(sankey.diagrams)
    for i in range(0, 2*n, 2):
        sankey.add(flows=[1, -1], orientations=[-1, -1],
                   patchlabel=str(prior + i),
                   prior=prior + i - 1, connect=(1, 0), alpha=0.5)
        sankey.add(flows=[1, -1], orientations=[1, 1],
                   patchlabel=str(prior + i + 1),
                   prior=prior + i, connect=(1, 0), alpha=0.5)

Определяем функцию corner

Далее определяем функцию corner, которая генерирует угловую связь.

def corner(sankey):
    """Generate a corner link."""
    prior = len(sankey.diagrams)
    sankey.add(flows=[1, -1], orientations=[0, 1],
               patchlabel=str(prior), facecolor='k',
               prior=prior - 1, connect=(1, 0), alpha=0.5)

Создаем объекты figure и axis

Теперь создаем объекты figure и axis с использованием plt.subplots().

fig, ax = plt.subplots()

Создаем объект Sankey

Далее создаем объект Sankey с использованием объекта ax и устанавливаем unit равным None.

sankey = Sankey(ax=ax, unit=None)

Добавляем первый диаграмму

Добавляем первую диаграмму с использованием sankey.add() с flows=[1, -1] и orientations=[0, 1].

sankey.add(flows=[1, -1], orientations=[0, 1],
           patchlabel="0", facecolor='k',
           rotation=45)

Добавляем боковые цепи и угловые связи

Теперь добавляем боковые цепи и угловые связи с использованием функций side() и corner().

side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)
corner(sankey)
side(sankey, n=links_per_side)

Завершаем и отображаем диаграмму Санки

Наконец, завершаем диаграмму Sankey с использованием sankey.finish() и отображаем ее с использованием plt.show().

sankey.finish()
plt.show()

Резюме

В этом практическом занятии мы узнали, как использовать класс Sankey из модуля matplotlib.sankey для создания длинной цепи связей с использованием Python и Matplotlib. Мы определили функции side и corner для генерации соответственно боковых цепей и угловых связей. Мы также добавили первую диаграмму, боковые цепи и угловые связи с использованием объекта Sankey и отобразили диаграмму с использованием plt.show().