Creación de diagramas Sankey con Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a usar la clase Sankey del módulo matplotlib.sankey para crear una larga cadena de conexiones usando Python Matplotlib.

Consejos sobre la VM

Una vez finalizada la inicialización de 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 puede automatizarse 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 resolveremos el problema para usted de inmediato.

Importar las bibliotecas y módulos necesarios

Comenzamos importando las bibliotecas y módulos necesarios. Usaremos matplotlib.pyplot y matplotlib.sankey.

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

Definir el número de enlaces por lado

A continuación, definimos el número de enlaces por lado en nuestra cadena. En este ejemplo, lo estableceremos en 6.

links_per_side = 6

Definir la función side

Ahora, definimos la función side que genera una cadena lateral.

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)

Definir la función corner

A continuación, definimos la función corner que genera un enlace de esquina.

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)

Crear los objetos de figura y eje

Ahora, creamos los objetos figure y axis usando plt.subplots().

fig, ax = plt.subplots()

Crear el objeto Sankey

A continuación, creamos el objeto Sankey usando el objeto ax y establecemos la unit en None.

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

Agregar el primer diagrama

Agregamos el primer diagrama usando sankey.add() con flows=[1, -1] y orientations=[0, 1].

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

Agregar cadenas laterales y enlaces de esquina

Ahora, agregamos las cadenas laterales y los enlaces de esquina usando las funciones side() y 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)

Terminar y mostrar el diagrama Sankey

Finalmente, terminamos el diagrama Sankey usando sankey.finish() y lo mostramos usando plt.show().

sankey.finish()
plt.show()

Resumen

En este laboratorio, aprendimos cómo usar la clase Sankey del módulo matplotlib.sankey para crear una larga cadena de conexiones usando Python y Matplotlib. Definimos las funciones side y corner para generar las cadenas laterales y los enlaces de esquina respectivamente. También agregamos el primer diagrama, las cadenas laterales y los enlaces de esquina usando el objeto Sankey y mostramos el diagrama usando plt.show().