Nota
Haga clic aquí para descargar el código de ejemplo completo
La clase Sankey #
Demuestre la clase Sankey produciendo tres diagramas básicos.
import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey
Ejemplo 1: en su mayoría valores predeterminados
Esto demuestra cómo crear un diagrama simple llamando implícitamente al método Sankey.add() y agregando finish() a la llamada a la clase.
Text(0.5, 1.0, 'The default settings produce a diagram like this.')
Aviso:
Los ejes no se proporcionaron cuando se creó una instancia de Sankey(), por lo que se crearon automáticamente.
El argumento de escala no era necesario ya que los datos ya estaban normalizados.
De forma predeterminada, las longitudes de las rutas están justificadas.
Ejemplo 2
Esto demuestra:
Establecer un camino más largo que los otros
Colocar una etiqueta en el medio del diagrama.
Usando el argumento de escala para normalizar los flujos
Pasar implícitamente argumentos de palabras clave a PathPatch()
Cambiar el ángulo de las puntas de flecha
Cambiar el desplazamiento entre las puntas de los caminos y sus etiquetas
Dar formato a los números en las etiquetas de ruta y la unidad asociada
Cambiar la apariencia del parche y las etiquetas después de crear la 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')
Aviso:
Dado que la suma de los flujos es distinta de cero, el ancho del tronco no es uniforme. El sistema de registro matplotlib registra esto en el nivel DEBUG.
El segundo flujo no aparece porque su valor es cero. Nuevamente, esto se registra en el nivel DEBUG.
Ejemplo 3
Esto demuestra:
Conexión de dos sistemas
Desactivar las etiquetas de las cantidades
Agregar una leyenda
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()
<matplotlib.legend.Legend object at 0x7f2cdd75b5e0>
Observe que solo se especifica una conexión, pero los sistemas forman un circuito ya que: (1) las longitudes de los caminos están justificadas y (2) la orientación y el orden de los flujos están reflejados.
plt.show()
Referencias
En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:
Tiempo total de ejecución del script: (0 minutos 1.040 segundos)