A classe Sankey #

Demonstre a classe Sankey produzindo três diagramas básicos.

import matplotlib.pyplot as plt

from matplotlib.sankey import Sankey

Exemplo 1 -- Principalmente defaults

Isso demonstra como criar um diagrama simples chamando implicitamente o método Sankey.add() e acrescentando finish() à chamada da classe.

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.")
As configurações padrão produzem um diagrama como este.
Text(0.5, 1.0, 'The default settings produce a diagram like this.')

Perceber:

  1. Os eixos não foram fornecidos quando Sankey() foi instanciado, então eles foram criados automaticamente.

  2. O argumento de escala não era necessário, pois os dados já estavam normalizados.

  3. Por padrão, os comprimentos dos caminhos são justificados.

Exemplo 2

Isso demonstra:

  1. Definindo um caminho mais longo que os outros

  2. Colocar um rótulo no meio do diagrama

  3. Usando o argumento de escala para normalizar os fluxos

  4. Passando implicitamente argumentos de palavra-chave para PathPatch ()

  5. Alterar o ângulo das pontas das setas

  6. Alterando o deslocamento entre as pontas dos caminhos e seus rótulos

  7. Formatando os números nos rótulos de caminho e a unidade associada

  8. Alterar a aparência do patch e os rótulos após a criação da figura

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')
Diagrama de Fluxo de um Widget

Perceber:

  1. Como a soma dos fluxos é diferente de zero, a largura do tronco não é uniforme. O sistema de log matplotlib registra isso no nível DEBUG.

  2. O segundo fluxo não aparece porque seu valor é zero. Novamente, isso é registrado no nível DEBUG.

Exemplo 3

Isso demonstra:

  1. Conectando dois sistemas

  2. Desativando os rótulos das quantidades

  3. Adicionando uma legenda

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()
Dois sistemas
<matplotlib.legend.Legend object at 0x7f2cdd75b5e0>

Observe que apenas uma conexão é especificada, mas os sistemas formam um circuito desde que: (1) os comprimentos dos caminhos sejam justificados e (2) a orientação e ordenação dos fluxos seja espelhada.

Referências

O uso das seguintes funções, métodos, classes e módulos é mostrado neste exemplo:

Tempo total de execução do script: ( 0 minutos 1,040 segundos)

Galeria gerada por Sphinx-Gallery