Введение
В этом руководстве мы узнаем, как создать диаграмму Санки с использованием библиотеки Matplotlib для Python. Диаграммы Санки - это тип диаграммы потока, которые обычно используются для визуализации потока энергии или материалов через систему. Они особенно полезны для анализа сложных систем с множеством входов и выходов.
Советы по работе с ВМ
После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки
Начнем с импорта библиотек, необходимых для создания диаграмм Санки с использованием Matplotlib. Импортируем класс Sankey из модуля matplotlib.sankey и модуль pyplot из Matplotlib.
import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey
Определяем данные
Далее мы определим данные, которые хотим визуализировать с использованием диаграммы Санки. В этом примере мы будем использовать данные из примера 8.6 из книги Морана и Шапиро "Основы инженерной термодинамики". Эти данные представляют собой поток энергии в рангиновом тепловом цикле. Мы определим потоки энергии в виде списка значений.
Hdot = [260.431, 35.078, 180.794, 221.115, 22.700,
142.361, 10.193, 10.210, 43.670, 44.312,
68.631, 10.758, 10.758, 0.017, 0.642,
232.121, 44.559, 100.613, 132.168] ## MW
Создаем фигуру и оси
Мы создадим объект фигуры и добавим к ней одну группу осей. Также зададим заголовок графика.
fig = plt.figure(figsize=(8, 9))
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
title="Rankine Power Cycle: Example 8.6 from Moran and "
"Shapiro\n\x22Fundamentals of Engineering Thermodynamics "
"\x22, 6th ed., 2008")
Создаем диаграмму Санки
Мы создадим экземпляр класса Sankey и передадим в него объект осей, который мы создали на шаге 3. Также зададим формат значений потока и единицу измерения. Затем добавим потоки к диаграмме с использованием метода add. Укажем цвет каждого потока с использованием параметра facecolor и метки для каждого потока с использованием параметра labels. Также укажем длины путей для каждого потока с использованием параметра pathlengths и ориентацию каждого потока с использованием параметра orientations. Наконец, мы соединим потоки с использованием параметра connect.
sankey = Sankey(ax=ax, format='%.3G', unit=' MW', gap=0.5, scale=1.0/Hdot[0])
sankey.add(patchlabel='\n\nНасос 1', rotation=90, facecolor='#37c959',
flows=[Hdot[13], Hdot[6], -Hdot[7]],
labels=['Мощность валу', '', None],
pathlengths=[0.4, 0.883, 0.25],
orientations=[1, -1, 0])
sankey.add(patchlabel='\n\nОткрытый\nтеплообменник', facecolor='#37c959',
flows=[Hdot[11], Hdot[7], Hdot[4], -Hdot[8]],
labels=[None, '', None, None],
pathlengths=[0.25, 0.25, 1.93, 0.25],
orientations=[1, 0, -1, 0], prior=0, connect=(2, 1))
sankey.add(patchlabel='\n\nНасос 2', facecolor='#37c959',
flows=[Hdot[14], Hdot[8], -Hdot[9]],
labels=['Мощность валу', '', None],
pathlengths=[0.4, 0.25, 0.25],
orientations=[1, 0, 0], prior=1, connect=(3, 1))
sankey.add(patchlabel='Закрытый\nтеплообменник', trunklength=2.914, fc='#37c959',
flows=[Hdot[9], Hdot[1], -Hdot[11], -Hdot[10]],
pathlengths=[0.25, 1.543, 0.25, 0.25],
labels=['', '', None, None],
orientations=[0, -1, 1, -1], prior=2, connect=(2, 0))
sankey.add(patchlabel='Трап', facecolor='#37c959', trunklength=5.102,
flows=[Hdot[11], -Hdot[12]],
labels=['\n', None],
pathlengths=[1.0, 1.01],
orientations=[1, 1], prior=3, connect=(2, 0))
sankey.add(patchlabel='Паровой\nгенератор', facecolor='#ff5555',
flows=[Hdot[15], Hdot[10], Hdot[2], -Hdot[3], -Hdot[0]],
labels=['Теплоемкость', '', '', None, None],
pathlengths=0.25,
orientations=[1, 0, -1, -1, -1], prior=3, connect=(3, 1))
sankey.add(patchlabel='\n\n\nТурбина 1', facecolor='#37c959',
flows=[Hdot[0], -Hdot[16], -Hdot[1], -Hdot[2]],
labels=['', None, None, None],
pathlengths=[0.25, 0.153, 1.543, 0.25],
orientations=[0, 1, -1, -1], prior=5, connect=(4, 0))
sankey.add(patchlabel='\n\n\nПерегрев', facecolor='#37c959',
flows=[Hdot[2], -Hdot[2]],
labels=[None, None],
pathlengths=[0.725, 0.25],
orientations=[-1, 0], prior=6, connect=(3, 0))
sankey.add(patchlabel='Турбина 2', trunklength=3.212, facecolor='#37c959',
flows=[Hdot[3], Hdot[16], -Hdot[5], -Hdot[4], -Hdot[17]],
labels=[None, 'Мощность валу', None, '', 'Мощность валу'],
pathlengths=[0.751, 0.15, 0.25, 1.93, 0.25],
orientations=[0, -1, 0, -1, 1], prior=6, connect=(1, 1))
sankey.add(patchlabel='Конденсатор', facecolor='#58b1fa', trunklength=1.764,
flows=[Hdot[5], -Hdot[18], -Hdot[6]],
labels=['', 'Теплоемкость', None],
pathlengths=[0.45, 0.25, 0.883],
orientations=[-1, 1, 0], prior=8, connect=(2, 0))
Добавляем метки и форматирование
Мы добавим метки к участкам диаграммы Санки с использованием атрибута text каждого участка. Также отформатируем текст, сделав его жирным и увеличив размер шрифта.
diagrams = sankey.finish()
for diagram in diagrams:
diagram.text.set_fontweight('bold')
diagram.text.set_fontsize('10')
for text in diagram.texts:
text.set_fontsize('10')
Показываем график
Наконец, мы покажем диаграмму Санки с использованием метода show модуля pyplot.
plt.show()
Резюме
В этом уроке мы узнали, как создавать диаграмму Санки с использованием библиотеки Matplotlib для Python. Мы использовали класс Sankey из модуля matplotlib.sankey для создания диаграммы, и добавили метки и форматирование к диаграмме с использованием атрибута text каждого участка. Диаграммы Санки - это полезный инструмент для визуализации потока энергии или материалов через сложную систему.