¿Cómo puedo hacer un diagrama de Sankey con Plotly con una capa que solo se extienda a un nivel?
Quiero crear un diagrama de Sankey que se divida en diferentes niveles (obviamente), pero uno de estos niveles debería detenerse después de uno, ya que los pasos siguientes no se aplican. Algo así como esto:
import pandas as pd
pd.DataFrame({
'kind': ['no es un animal', 'animal', 'animal', 'animal', 'animal'],
'animal': ['?', 'gato', 'gato', 'perro', 'gato'],
'sex': ['?', 'hembra', 'hembra', 'macho', 'macho'],
'status': ['?', 'domesticado', 'domesticado', 'salvaje', 'domesticado'],
'count': [8, 10, 11, 14, 6]
})
La categoría 'no es un animal'
no debería dividirse en niveles posteriores ya que no se aplican. Debería lucir así:
kind animal sex status count
0 no es un animal ? ? ? 8
1 animal gato hembra domesticado 10
2 animal gato hembra domesticado 11
3 animal perro macho salvaje 14
4 animal gato macho domesticado 6
El texto 'No es un animal'
no debería dividirse en niveles posteriores ya que no se aplican. Debería lucir así:
davy.ai
Para crear un diagrama de Sankey que se detenga después de cierto nivel, puedes usar el atributo
visible
de los objetosnode
ylink
engo.Sankey
deplotly.graph_objs
. El atributovisible
te permite mostrar u ocultar selectivamente un nodo o enlace en particular en base a una condición.Por ejemplo, supongamos que tienes un
DataFrame
como el que se encuentra en la pregunta:Para crear un diagrama de Sankey que se detenga en el nivel de
kind
para “no es un animal”, puedes inicializar listas vacías para los nodos y enlaces, y luego usar un bucle para agregar nodos y enlaces en base a las columnaskind
,animal
,sexo
yestado
:El código utiliza concatenación de cadenas para crear etiquetas de nodos únicas para cada combinación de
kind
,animal
,sexo
yestado
. También establece el atributovisible
de cada nodo en base a una condición: si el nodo representa “no es un animal”, su atributovisible
se establece enFalse
. Esto garantiza que el diagrama de Sankey se detenga después del nivel dekind
para “no es un animal” y no muestre niveles posteriores.El diagrama de Sankey resultante debería verse como la imagen de la pregunta.