Criando Diagramas de Sankey

Beginner

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

Introdução

Diagramas de Sankey são diagramas de fluxo que mostram o movimento de recursos ou energia entre diferentes estágios ou sistemas. Neste tutorial, usaremos a biblioteca Matplotlib em Python para criar diagramas de Sankey.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar as bibliotecas necessárias

Antes de começarmos a criar diagramas de Sankey, precisamos importar as bibliotecas necessárias. Neste tutorial, usaremos a biblioteca Matplotlib.

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

Criar um diagrama de Sankey simples

Começaremos criando um diagrama de Sankey simples que demonstra como usar a classe Sankey.

Sankey(flows=[0.25, 0.15, 0.60, -0.20, -0.15, -0.05, -0.50, -0.10],
       labels=['', '', '', 'First', 'Second', 'Third', 'Fourth', 'Fifth'],
       orientations=[-1, 1, 0, 1, 1, 1, 0, -1]).finish()
plt.title("The default settings produce a diagram like this.")

Este código produzirá um diagrama de Sankey com as configurações padrão, que incluem os rótulos e orientações dos fluxos. O diagrama resultante será exibido com o título "The default settings produce a diagram like this."

Personalizar o diagrama de Sankey

Podemos personalizar o diagrama de Sankey alterando os fluxos, rótulos, orientações e outros parâmetros. Neste exemplo, criaremos um diagrama com caminhos mais longos e um rótulo no meio.

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
                     title="Flow Diagram of a Widget")
sankey = Sankey(ax=ax, scale=0.01, offset=0.2, head_angle=180,
                format='%.0f', unit='%')
sankey.add(flows=[25, 0, 60, -10, -20, -5, -15, -10, -40],
           labels=['', '', '', 'First', 'Second', 'Third', 'Fourth',
                   'Fifth', 'Hurray!'],
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0],
           pathlengths=[0.25, 0.25, 0.25, 0.25, 0.25, 0.6, 0.25, 0.25,
                        0.25],
           patchlabel="Widget\nA")  ## Arguments to matplotlib.patches.PathPatch
diagrams = sankey.finish()
diagrams[0].texts[-1].set_color('r')
diagrams[0].text.set_fontweight('bold')

Este código criará um diagrama de Sankey com caminhos mais longos, um rótulo no meio e outros parâmetros personalizados. O diagrama resultante será exibido com o título "Flow Diagram of a Widget."

Conectar dois sistemas em um diagrama de Sankey

Também podemos conectar dois sistemas em um diagrama de Sankey. Neste exemplo, criaremos um diagrama com dois sistemas que estão conectados.

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Two Systems")
flows = [0.25, 0.15, 0.60, -0.10, -0.05, -0.25, -0.15, -0.10, -0.35]
sankey = Sankey(ax=ax, unit=None)
sankey.add(flows=flows, label='one',
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0])
sankey.add(flows=[-0.25, 0.15, 0.1], label='two',
           orientations=[-1, -1, -1], prior=0, connect=(0, 0))
diagrams = sankey.finish()
diagrams[-1].patch.set_hatch('/')
plt.legend()

Este código criará um diagrama de Sankey com dois sistemas que estão conectados. O diagrama resultante será exibido com o título "Two Systems."

Resumo

Neste tutorial, aprendemos como criar diagramas de Sankey usando a biblioteca Matplotlib em Python. Começamos com um diagrama simples e, em seguida, o personalizamos alterando os fluxos, rótulos, orientações e outros parâmetros. Também aprendemos como conectar dois sistemas em um diagrama de Sankey. Com essas ferramentas, podemos criar diagramas de fluxo informativos e visualmente atraentes para uma variedade de aplicações.