En todos los ejemplos que puedo encontrar para los diagramas Sankey/Alluvial, veo que los enlaces se unen en el nodo de tal manera que el tamaño del nodo es la suma de todos los enlaces que se conectan a él. Sin embargo, me gustaría visualizar un procedimiento de coincidencia, en el que se emparejan 2 bases de datos, en 3 conjuntos de datos nuevos (A: los datos del conjunto de datos 1, que no se pudieron emparejar; B: los datos que se pudieron emparejar entre los 2 conjuntos de datos; y C: los datos del conjunto de datos 2, que no pudieron coincidir).
Si dibujo una versión súper simple de esto en pintura, se ve así:
¿Hay alguna manera de hacer esto en R, python o D3JS? Preferiblemente en el paquete R networkD3 ot ggplot , pero cualquier software es aceptable.
En mis datos reales, habrá varios pasos de coincidencia y más de 2 conjuntos de datos, por eso quiero implementar esto en R, python o JS y no hacer una versión única en Adobe.
Por favor, esta es una versión etiquetada de la trama, en la que 75 de A y B se 'conectan' a D. De modo que A + B > C + D + E
import pandas as pd import plotly.graph_objects as go import numpy as np # two data sets with some overlap... df1 = pd.DataFrame({"key":range(0,100)}) df2 = pd.DataFrame({"key":range(25, 175)}) # calculate overlap rows o1 = df1["key"].isin(df2["key"]).value_counts() o2 = df2["key"].isin(df1["key"]).value_counts() # prep overlap rows into structure ready for sankey figure df = pd.DataFrame([{"source":str(len(df1)), "target":"a" + str(o1[False]), "value":o1[False]}, {"source":str(len(df1)), "target":"b" + str(o1[True]), "value":o1[True]/2}, {"source":str(len(df2)), "target":"b" + str(o2[True]), "value":o2[True]/2}, {"source":str(len(df2)), "target":"c" + str(o2[False]), "value":o2[False]}, ]) # build sankey figure nodes = np.unique(df[["source","target"]], axis=None) nodes = pd.Series(index=nodes, data=range(len(nodes))) go.Figure( go.Sankey( node={"label": nodes.index}, link={ "source": nodes.loc[df["source"]], "target": nodes.loc[df["target"]], "value": df["value"], }, ) )