Creación de diagramas de Sankey

Beginner

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

Introducción

Los diagramas de Sankey son diagramas de flujo que muestran el movimiento de recursos o energía entre diferentes etapas o sistemas. En este tutorial, usaremos la librería Matplotlib en Python para crear diagramas de Sankey.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importar las bibliotecas necesarias

Antes de comenzar a crear diagramas de Sankey, necesitamos importar las bibliotecas necesarias. En este tutorial, usaremos la librería Matplotlib.

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

Crear un diagrama de Sankey simple

Comenzaremos creando un diagrama de Sankey simple que demuestra cómo usar la clase 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 generará un diagrama de Sankey con configuraciones predeterminadas, que incluye las etiquetas y orientaciones de los flujos. El diagrama resultante se mostrará con el título "The default settings produce a diagram like this."

Personalizar el diagrama de Sankey

Podemos personalizar el diagrama de Sankey cambiando los flujos, etiquetas, orientaciones y otros parámetros. En este ejemplo, crearemos un diagrama con trayectorias más largas y una etiqueta en el centro.

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")  ## Argumentos para matplotlib.patches.PathPatch
diagrams = sankey.finish()
diagrams[0].texts[-1].set_color('r')
diagrams[0].text.set_fontweight('bold')

Este código creará un diagrama de Sankey con trayectorias más largas, una etiqueta en el centro y otros parámetros personalizados. El diagrama resultante se mostrará con el título "Flow Diagram of a Widget".

Conectar dos sistemas en un diagrama de Sankey

También podemos conectar dos sistemas en un diagrama de Sankey. En este ejemplo, crearemos un diagrama con dos sistemas 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 creará un diagrama de Sankey con dos sistemas conectados. El diagrama resultante se mostrará con el título "Two Systems".

Resumen

En este tutorial, aprendimos cómo crear diagramas de Sankey usando la librería Matplotlib en Python. Comenzamos con un diagrama simple y luego lo personalizamos cambiando los flujos, etiquetas, orientaciones y otros parámetros. También aprendimos cómo conectar dos sistemas en un diagrama de Sankey. Con estas herramientas, podemos crear diagramas de flujo informativos y visualmente atractivos para una variedad de aplicaciones.