Saltar al contenido principal

Cómo crear un diagrama de Sankey en Excel, Python y R

Desde los conceptos básicos hasta la implementación avanzada, aprende a construir diagramas Sankey eficaces utilizando herramientas populares. Descubre los componentes clave, las mejores prácticas y los principios de diseño que hacen que las visualizaciones de flujo sean convincentes y perspicaces.
Actualizado 13 jun 2025  · 9 min de lectura

La belleza de los diagramas de Sankey reside en su capacidad para simplificar los sistemas de varias etapas. En lugar de recorrer filas de datos para encontrar las mayores pérdidas de energía o asignaciones presupuestarias, puedes detectarlas al instante buscando los flujos más gruesos. Esto los hace útiles para la gestión de la energía, el análisis financiero, la optimización del embudo de marketing y cualquier escenario en el que comprender el flujo y la transformación de los recursos importe más que las comparaciones numéricas precisas.

Para quienes deseen ampliar sus capacidades analíticas más allá de la visualización de flujos, nuestros cursos Visualización de datos en Power BI y Visualización de datos en Tableau te enseñan a crear cuadros de mando profesionales e informes interactivos utilizando las plataformas de inteligencia empresarial líderes del sector.

¿Qué es un diagrama Sankey?

Un diagrama de Sankey es una visualización de flujo especializada en la que la anchura de las flechas de conexión representa la magnitud del flujo entre diferentes etapas, categorías o entidades. A diferencia de los diagramas de flujo tradicionales, que muestran los pasos del proceso, o de los diagramas de barras, que comparan valores discretos, los diagramas de Sankey destacan por mostrar cómo se mueven, transforman o distribuyen las cantidades a través de un sistema.

Se muestran los componentes del diagrama Sankey. Imagen del autor.

El diagrama anterior ilustra cómo fluye un presupuesto anual de 100.000 dólares a través de las diferentes categorías. Observa cómo la asignación de Marketing (40.000 $) aparece como un flujo visiblemente más grueso en comparación con I+D (25.000 $), haciendo que las diferencias proporcionales sean inmediatamente evidentes.

Historia y evolución de los diagramas de Sankey

El primer diagrama de Sankey conocido apareció en 1898, cuando el capitán Matthew Henry Phineas Riall Sankey lo utilizó para mostrar la eficiencia energética de una máquina de vapor. Su diagrama reveló que sólo una pequeña parte de la energía del combustible contribuía realmente al trabajo útil, perdiéndose la mayor parte como calor residual.

el primer diagrama de Sankey

Sin embargo, el concepto de visualización proporcional del flujo es anterior al Capitán Sankey. Charles Joseph Minard creó lo que muchos consideran el diagrama de flujo más famoso en 1869, representando la desastrosa campaña rusa de 1812 de Napoleón. El diagrama de Minard mostraba el tamaño decreciente del ejército a medida que avanzaba hacia Rusia y luego se retiraba, y el grosor de la línea representaba el número de soldados supervivientes.

Componentes de un diagrama Sankey

Comprender los elementos clave de un diagrama de Sankey te ayudará tanto a interpretar los existentes como a crear los tuyos propios con eficacia.

  • Nodos representan las categorías, etapas o entidades de tu sistema. En nuestro ejemplo de presupuesto, "Presupuesto anual", "Marketing" y "Anuncios digitales" son nodos. Los nodos fuente (como "Presupuesto anual") suelen aparecer a la izquierda, mientras que nodos objetivo (como "Anuncios Digitales") aparecen a la derecha, aunque esto puede variar en función de tus preferencias de diseño.
  • Flujos o enlaces son los conectores direccionales entre nodos, y su anchura es proporcional al valor que representan. El flujo naranja grueso del Presupuesto Anual al Marketing representa 40.000 $, mientras que el flujo mucho más fino al Contenido representa sólo 5.000 $. Esta amplitud proporcional es la característica definitoria que hace que los diagramas de Sankey sean tan eficaces para resaltar las diferencias de magnitud.
  • Los valores son los datos numéricos que determinan la anchura de cada flujo. Pueden representar dinero, energía, materiales, personas o cualquier recurso cuantificable que se mueva a través de tu sistema. El diagrama calcula automáticamente la anchura adecuada basándose en estos valores, garantizando la precisión visual.
  • Salidas son flujos especiales que representan pérdidas, residuos o recursos que salen del sistema sin llegar a un nodo de destino. Aunque nuestro ejemplo de presupuesto no muestra los abandonos, puedes verlos en los diagramas de energía que muestran la pérdida de calor o en los embudos de marketing que muestran a los clientes que abandonan el proceso.

Cómo crear un diagrama Sankey

La creación de diagramas Sankey requiere distintos enfoques, según tus herramientas preferidas y tu nivel de comodidad técnica. Recorreremos el mismo ejemplo de asignación presupuestaria utilizando Excel, Python y R, para que puedas elegir el método que mejor se adapte a tu flujo de trabajo y experiencia.

Diagrama de Sankey en Excel

Excel no incluye un tipo de gráfico Sankey nativo, lo que significa que tendrás que utilizar un complemento de terceros para crear estas visualizaciones. Según mi experiencia, ChartExpo es una de las opciones más populares y fáciles de usar.

Interfaz ChartExpo y vista previa del diagrama Sankey. Imagen del autor.

Antes de crear el diagrama, tendrás que estructurar tus datos en un formato fuente-destino-valor en el que cada fila represente una conexión de flujo. Para nuestro ejemplo de presupuesto, esto significa enumerar cada asignación presupuestaria como una fila separada con la categoría de origen, la categoría de destino y el importe en dólares.

El proceso es sencillo una vez que tienes ChartExpo instalado. Primero, instala el complemento desde Microsoft AppSource o a través del mercado de complementos de Excel. A continuación, selecciona tu rango de datos incluyendo las cabeceras y elige Gráfico Sankey en las opciones de visualización de ChartExpo.

El complemento detecta automáticamente tus columnas de origen, destino y valor basándose en tu estructura de datos. Como se muestra en la interfaz anterior, ChartExpo ofrece una vista previa de tu diagrama junto con opciones para Crear gráfico a partir de la selección, personalizar la visualización o exportar el gráfico terminado para utilizarlo en presentaciones o informes.

Diagrama de Sankey en Python

Python ofrece excelentes opciones para crear diagramas de Sankey, siendo Plotly la biblioteca más recomendada debido a sus capacidades interactivas y a la calidad profesional de sus resultados. Utilizando el mismo ejemplo de asignación presupuestaria con el que empezamos, recrearemos esa visualización idéntica mediante código.

Paso 1: Preparación de datos

Empieza organizando tus datos en el formato que espera Plotly. Necesitarás tres componentes principales: una lista de nombres de nodos y arreglos que especifiquen los índices de origen, los índices de destino y los valores de cada flujo.

import plotly.graph_objects as go

# Define all nodes in your diagram
nodes = ["Annual Budget", "Marketing", "Operations", "R&D", 
         "Digital Ads", "Events", "Content", "Salaries", 
         "Office", "Utilities", "Software", "Equipment"]

# Define the connections (using node indices)
source_indices = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3]
target_indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
values = [40, 35, 25, 25, 10, 5, 20, 10, 5, 15, 10]

Los índices corresponden a posiciones en tu lista de nodos, por lo que source_indices = [0, 0, 0] significa que los tres primeros flujos empiezan en "Annual Budget" (posición 0).

Paso 2: Creación básica de Sankey

Crea la estructura central del diagrama utilizando el objeto Sankey de Plotly. Los parámetros esenciales son las definiciones de los nodos y las especificaciones de los enlaces.

fig = go.Figure(data=[go.Sankey(
    node=dict(
        label=nodes,
        pad=15,
        thickness=20
    ),
    link=dict(
        source=source_indices,
        target=target_indices,
        value=values
    )
)])

Esto crea un diagrama Sankey funcional con el estilo por defecto. pad controla el espaciado entre nodos, mientras que thickness determina la anchura de los rectángulos de los nodos.

Paso 3: Estilo y personalización

Mejora tu diagrama con colores, un diseño mejorado y un formato profesional.

# Add colors and transparency
fig.update_traces(
    node_color=["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728",
                "#ff9999", "#ff9999", "#ff9999", "#90ee90",
                "#90ee90", "#90ee90", "#ffcccb", "#ffcccb"],
    link_color=["rgba(255, 127, 14, 0.4)", "rgba(44, 160, 44, 0.4)",
                "rgba(214, 39, 40, 0.4)", "rgba(255, 127, 14, 0.6)",
                "rgba(255, 127, 14, 0.6)", "rgba(255, 127, 14, 0.6)",
                "rgba(44, 160, 44, 0.6)", "rgba(44, 160, 44, 0.6)",
                "rgba(44, 160, 44, 0.6)", "rgba(214, 39, 40, 0.6)",
                "rgba(214, 39, 40, 0.6)"]
)

# Update layout for better presentation
fig.update_layout(
    title="Annual Budget Allocation",
    font=dict(size=16, family="Arial Black", color="black"),
    width=900,
    height=600
)

Paso 4: Visualizar y exportar

Visualiza tu diagrama y guárdalo en varios formatos para diferentes usos.

fig.show()  # Display in Jupyter notebook or browser

# Export options
fig.write_html("budget_sankey.html")  # Interactive web version
fig.write_image("budget_sankey.png")  # Static image

Para aplicaciones web, puedes integrarlo directamente en aplicaciones Dash, haciendo que tus diagramas Sankey formen parte de cuadros de mando interactivos. La visualización resultante coincide exactamente con lo que vimos en la imagen inicial. Tenemos un gran código que te enseña a Construir Cuadros de Mando con Plotly y Dash para que puedas probar esta idea por ti mismo.

Diagrama de Sankey en R

R proporciona excelentes capacidades para crear diagramas de Sankey a través del paquete networkD3, que crea visualizaciones interactivas listas para la web. Utilizando nuestros conocidos datos de asignación presupuestaria, demostraremos cómo R puede producir los mismos resultados profesionales con funciones de interactividad incorporadas.

El paquete networkD3 está diseñado específicamente para crear visualizaciones de redes en R basadas en D3.js, incluidos los diagramas de Sankey. Este enfoque ofrece varias ventajas: interactividad automática (efectos hover, zoom), fácil integración con los informes R Markdown, y opciones de exportación sin problemas para el despliegue web.

Paso 1: Configuración y preparación de datos

Primero, instala y carga los paquetes necesarios, luego estructura tus datos en el formato que espera networkD3.

# Install required packages (run once)
install.packages(c("networkD3", "dplyr"))

# Load libraries
library(networkD3)
library(dplyr)

# Create nodes dataframe
nodes <- data.frame(
  name = c("Annual Budget", "Marketing", "Operations", "R&D",
           "Digital Ads", "Events", "Content", "Salaries", 
           "Office", "Utilities", "Software", "Equipment")
)

# Create links dataframe (note: networkD3 uses 0-based indexing)
links <- data.frame(
  source = c(0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3),
  target = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
  value = c(40, 35, 25, 25, 10, 5, 20, 10, 5, 15, 10)
)

La diferencia clave con Python es que R requiere marcos de datos separados para los nodos y los enlaces, y el marco de datos de los enlaces utiliza la indexación basada en cero para referenciar las posiciones de los nodos.

Paso 2: Creación básica de Sankey

Crea tu diagrama utilizando la función sankeyNetwork() con los parámetros esenciales.

# Create basic Sankey diagram
sankey_plot <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target", 
  Value = "value",
  NodeID = "name",
  units = "K USD"
)

# Display the plot
Sankey_plot

Esto genera un diagrama de Sankey interactivo en el que los usuarios pueden pasar el ratón por encima de los flujos para ver los valores exactos y arrastrar los nodos para reorganizar la disposición.

Paso 3: Personalización y estilo

Mejora tu diagrama con colores, tamaño y opciones de formato profesional.

# Advanced Sankey with customization
(sankey_advanced <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target",
  Value = "value",
  NodeID = "name",
  units = "K USD",
  fontSize = 14,
  fontFamily = "Arial",
  nodeWidth = 30,
  nodePadding = 20,
  margin = list(top = 50, right = 50, bottom = 50, left = 50),
  height = 600,
  width = 900
))

Paso 4: Opciones de exportación e integración

R facilita guardar tus diagramas interactivos en múltiples formatos e integrarlos en informes.

# Save as HTML file
library(htmlwidgets)
saveWidget(sankey_advanced, "budget_sankey.html", selfcontained = TRUE)

# For R Markdown integration, simply include the plot object
# The diagram will render as an interactive widget in your document

# For static image export (optional - requires webshot2 package)
install.packages("webshot2")
library(webshot2)

webshot("budget_sankey.html", "budget_sankey.png", vwidth = 900, vheight = 600)

Diagrama de Sankey interactivo creado con el paquete networkD3 de R. Imagen del autor. 

Este diagrama resultante proporciona las mismas perspectivas visuales que nuestras versiones en Python y Excel, pero con una interactividad incorporada que ayuda a los usuarios a explorar los datos más a fondo.

Alternativas y comparaciones al Diagrama Sankey

Los diagramas de Sankey funcionan mejor cuando tienes relaciones direccionales claras entre categorías, donde la magnitud del flujo importa más que las comparaciones precisas. Sin embargo, varias situaciones exigen distintos enfoques de visualización.

Cuándo no utilizar diagramas de Sankey

Evita los diagramas de Sankey cuando no haya flujo direccional entre tus categorías. Si tus datos simplemente muestran diferentes grupos o clasificaciones sin movimiento entre ellos, los gráficos de barras o circulares comunicarán tu mensaje con mayor claridad. Por ejemplo, comparar la cuota de mercado de distintas empresas no implica flujo, por lo que un gráfico de barras sería más apropiado.

Sáltalos cuando necesites comparaciones numéricas precisas. Aunque los diagramas de Sankey muestran eficazmente las magnitudes relativas, las distintas anchuras dificultan a los lectores la extracción de valores exactos o las comparaciones detalladas. Si los interesados necesitan comparar porcentajes o cantidades concretas con precisión, las tablas o los diagramas de barras sirven mejor.

Considera alternativas cuando tus datos sean demasiado complejos y desordenen el diagrama. Con más de 10-15 nodos o flujos muy interconectados, los diagramas de Sankey pueden resultar visualmente abrumadores. Las líneas cruzadas y los flujos superpuestos dificultan el seguimiento de las trayectorias individuales a través del sistema.

Elige visualizaciones más sencillas cuando tu público no esté familiarizado con los diagramas de Sankey. Como son menos comunes que los diagramas de barras o los gráficos lineales, algunos públicos pueden centrarse más en comprender el formato que en interpretar tus datos. En las presentaciones ante un público general, limítate a los tipos de gráficos conocidos, a menos que la relación de flujo sea esencial para tu mensaje.

Mejores alternativas para escenarios específicos

Diagramas aluviales funcionan mejor para flujos categóricos o basados en el tiempo, en los que realizas un seguimiento de los cambios a lo largo de varios periodos de tiempo o etapas. Mientras que los diagramas de Sankey muestran las cantidades que fluyen por un sistema en un momento dado, los diagramas aluviales destacan por mostrar cómo evolucionan los datos categóricos. Por ejemplo, el seguimiento de cómo los votantes cambian de partido político en varias elecciones, o cómo los estudiantes cambian de carrera a lo largo de la universidad, se ajusta mejor a los diagramas aluviales que a los diagramas de Sankey.

Los gráficos de coordenadas paralelas sirven mejor para comparar datos multivariantes en los que quieres ver patrones en múltiples dimensiones simultáneamente. Funcionan bien cuando tienes muchas variables para cada punto de datos y quieres identificar conglomerados o valores atípicos. Por ejemplo, comparar coches por precio, eficiencia de combustible, índices de seguridad y métricas de rendimiento funciona mejor con coordenadas paralelas que intentando forzar estas relaciones en un formato de flujo.

Los diagramas de protuberancias gestionan los cambios de rango a lo largo del tiempo con más eficacia que los diagramas de Sankey o los aluviales. Cuando muestres cómo suben o bajan en la clasificación distintas entidades a lo largo de periodos de tiempo, los gráficos de protuberancias muestran claramente la trayectoria sin la complejidad visual de los flujos. Piensa en cómo cambian las posiciones de mercado de las distintas empresas a lo largo de los trimestres, o cómo se mueven los equipos deportivos en la clasificación de la liga a lo largo de las temporadas.

Para saber más, lee nuestra entrada del blog Los 5 mejores cursos de Business Intelligence para hacer en DataCamp, que te orienta sobre cómo adquirir experiencia con las herramientas importantes de BI.

Conclusión

El éxito de la visualización depende de la elección de la herramienta adecuada para tu situación concreta. Utiliza diagramas de Sankey cuando las relaciones de flujo direccional importen más que las comparaciones numéricas precisas, y cuando tu audiencia necesite identificar rápidamente los flujos más significativos de un sistema.

Para los lectores interesados en ir más allá de los diagramas de Sankey, nuestra entrada de blog 10 ideas de proyectos de visualización de datos para todos los niveles ofrece sugerencias de proyectos prácticos de distintos niveles de complejidad para construir tu portafolio de visualización. Estos proyectos ayudan a desarrollar habilidades de pensamiento crítico y crean pruebas tangibles de tus capacidades de visualización de datos.


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Como profesional experto en Ciencia de Datos, Aprendizaje Automático e IA Generativa, Vinod se dedica a compartir conocimientos y a capacitar a los aspirantes a científicos de datos para que tengan éxito en este dinámico campo.

Preguntas frecuentes

¿Cuál es la diferencia entre un diagrama de Sankey y un diagrama de flujo?

Mientras que los diagramas de flujo muestran los pasos del proceso y los puntos de decisión, los diagramas de Sankey visualizan específicamente el flujo y la cantidad de recursos, energía o datos entre las distintas etapas. La anchura de las flechas en los diagramas de Sankey es proporcional a los valores que se miden, mientras que los diagramas de flujo se centran en la lógica del proceso y no en las cantidades.

¿Qué tipo de datos son los más adecuados para los diagramas de Sankey?

Los diagramas de Sankey funcionan mejor con datos basados en flujos que muestran el movimiento o la transformación de una etapa a otra, como la distribución de energía, los embudos de conversión de un sitio web, los flujos de la cadena de suministro o las asignaciones presupuestarias. No son adecuados para datos puramente categóricos o conjuntos de datos en los que no existe una relación direccional entre las variables.

¿Cuáles son algunas buenas herramientas en línea para crear diagramas de Sankey sin codificar?

Para los usuarios que prefieren soluciones basadas en la web, SankeyMATIC ofrece una interfaz sencilla y gratuita para diagramas básicos, mientras que Flourish proporciona funciones más avanzadas e interactividad para presentaciones profesionales. Google Charts y Highcharts son excelentes para los programadores que quieran incrustar diagramas Sankey en sitios web, y Visual Paradigm ofrece amplias capacidades de diagramación como parte de un conjunto más amplio de herramientas empresariales.

¿Cuándo debo evitar utilizar un diagrama Sankey?

Evita los diagramas de Sankey cuando necesites comparaciones numéricas precisas (ya que los anchos de flujo pueden ser difíciles de medir con exactitud), cuando tus datos tengan demasiadas categorías que crearían desorden visual, o cuando no haya un flujo direccional real entre tus puntos de datos. Considera también alternativas más sencillas si tu público no está familiarizado con este tipo de visualización, ya que la novedad podría eclipsar tu mensaje.

¿Cómo manejo los valores negativos o las pérdidas en un diagrama Sankey?

Los diagramas de Sankey no suelen mostrar directamente valores negativos, ya que la anchura de las flechas representa cantidades positivas. En su lugar, muestra las pérdidas como flujos de salida separados de los nodos, o utiliza flujos de salida que no conecten con los nodos de destino para representar el despilfarro o la pérdida de recursos.

¿Cuál es la diferencia entre los diagramas de Sankey y los aluviales?

Los diagramas de Sankey se centran en las cantidades de flujo en un único momento, mientras que los diagramas aluviales muestran cómo cambian los datos categóricos a lo largo de múltiples periodos de tiempo o etapas. Los diagramas aluviales son mejores para seguir la migración, los cambios de categorías o la evolución a lo largo del tiempo.

Temas

Aprende con DataCamp

Curso

Statistical Simulation in Python

4 h
19K
Learn to solve increasingly complex problems using simulations to generate and analyze data.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

Tutorial

Tipos de gráficos de datos y cómo crearlos en Python

Explore varios tipos de gráficos de datos, desde los más comunes hasta los más avanzados y poco convencionales, qué muestran, cuándo utilizarlos, cuándo evitarlos y cómo crearlos y personalizarlos en Python.
Elena Kosourova's photo

Elena Kosourova

15 min

Tutorial

Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos

Descubra cómo utilizar Seaborn, una popular biblioteca de visualización de datos de Python, para crear y personalizar gráficos de líneas en Python.
Elena Kosourova's photo

Elena Kosourova

12 min

Tutorial

Introducción al trazado con Matplotlib en Python

Este tutorial muestra cómo utilizar Matplotlib, una potente biblioteca de visualización de datos en Python, para crear gráficos de líneas, barras y dispersión con datos bursátiles.

Kevin Babitz

25 min

Tutorial

Tutorial de Excel en Python: La guía definitiva

Aprende a leer e importar archivos Excel en Python, a escribir datos en estas hojas de cálculo y a encontrar los mejores paquetes para hacerlo.
Natassha Selvaraj's photo

Natassha Selvaraj

15 min

Tutorial

Tutorial sobre cómo ejecutar consultas SQL en Python y R

Aprenda formas fáciles y eficaces de ejecutar consultas SQL en Python y R para el análisis de datos y la gestión de bases de datos.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Tutorial

Gráfico lineal de series temporales Matplotlib

Este tutorial explora cómo crear y personalizar gráficos de líneas de series temporales en matplotlib.
Elena Kosourova's photo

Elena Kosourova

8 min

Ver másVer más