Basado en vinsburg/alluvial_diagram
Script (a convertir en módulo) para generar diagramas del tipo "alluvial", usando matplotlib y numpy.
Para usar el código, import alluvial
en tu código y sigue la sintaxis de los siguientes ejemplos. Ve la sección Uso Avanzado para ver la documentación de los parámetros disponibles.
matplotlib
numpy
Copia alluvial.py
en tu directorio de trabajo.
Tanto el código de los ejemplos como el gráfico resultante de cada uno, se encuentran disponibles en la carpeta examples
import alluvial
import matplotlib.pyplot as plt
import numpy as np
input_data = {'a': {'aa': 0.3, 'cc': 0.7, },
'b': {'aa': 2, 'bb': 0.5, },
'c': {'aa': 0.5, 'bb': 0.5, 'cc': 1.5, }}
ax = alluvial.plot(input_data)
fig = ax.get_figure()
fig.set_size_inches(5, 5)
plt.show()
![Ejemplo 1](/examples/1 - Simple/Example1.png)
import alluvial
import matplotlib.pyplot as plt
import matplotlib.cm
import numpy as np
# Generating the input_data:
SEED = 7
np.random.seed(SEED)
def rand_letter(num):
return chr(ord('A')+int(num*np.random.rand()))
input_data = [
[rand_letter(15), rand_letter(5)*2]
for _ in range(50)
]
# Plotting:
cmap = matplotlib.cm.get_cmap('jet')
ax = alluvial.plot(
input_data, alpha=0.4, color_side=1, rand_seed=SEED, figsize=(7, 5),
disp_width=True, wdisp_sep=' '*2, cmap=cmap, fontname='Monospace',
labels=('Capitals', 'Double Capitals'), label_shift=2)
ax.set_title('Utility display', fontsize=14, fontname='Monospace')
plt.show()
![Ejemplo 2](/examples/2 - Custom/Example2.png)
- Ejemplo 3 - Cargar desde csv
Formato de input adicional: Una lista de tuplas con la siguiente estructura:
input_data = [
('a_item0', 'b_item0'),
('a_item0', 'b_item1'),
('a_item1', 'b_item0'),
]
La mejor forma de entender cómo funcionan los siguientes parámetros es probando distintos valores y viendo cómo cambian los gráficos de salida.
Las venas (veins) son las líneas de algún color que unen ambos extremos del gráfico.
alpha=0.5
, define el facecolor alpha para todas las venas (float
entre0
y1
).color_side=0
, color de las venas determinado por los términos de la izquieda (0
) o los de la derecha (1
).x_range=(0, 1)
, cambia las coordenadas horizontales del gráfico.res=20
, determina el número de puntos que constituyen la ranura de la vena aluvial.h_gap_frac=0.03
, cambia la separación horizontal entre las etiquetas, entre los rectángulos de la vena base y entre las venas.v_gap_frac=0.03
, cambia la separación vertical entre las venas.colors=None
, una lista opcional de colores disponibles enmatplotlib
. El largo de la lista debe ser igual al número de elementos en el lado determinado porcolor_side
.cmap=None
, una instancia de un color map dematplotlib
(matplotlib.cm
) para elegir colores aleatorios. Si el valor esNone
, se utiliza"hsv"
.rand_seed=1
, la seed utilizada para el generador de colores aleatorios.a_sort=None, b_sort=None
, listas definiendo el orden en el gráfico de los elementos de cada extremo. Si el valor esNone
, los elementos son ordenados según su ancho.disp_width=False
, si esTrue
se muestra el ancho de las venas junto a las etiquetas de los elementos.wdisp_sep=7*' '
, sidisp_width
esTrue
este es el ancho de la separación entre la etiqueta y el ancho del elemento.width_in=True
, mostrar el ancho entre el texto del elemento y el gráfico. El orden se invierte si esFalse
.labels=None
, una tupla de la forma("a_label", "b_label")
que corresponde a la descripción de las etiquetas. Si el valor esNone
, no se muestran estos valores.figsize=(10, 15)
, el tamaño de la figurafontname='Arial'
, la font de todo el texto de la figura.
This project is licensed under the Apache 2.0 License - see the LICENSE.md file for details