Slope Graph

Slope Graph

Categoría ComparaciónEvolución

Qué es

Dos columnas de puntos conectados por líneas diagonales. Compara cómo cambia el ranking o valor de múltiples ítems entre exactamente dos momentos o condiciones.

Para qué sirve

Para mostrar cómo cambian las posiciones relativas entre dos períodos de tiempo o dos condiciones. Perfecto para comunicar quién sube y quién baja.

Cómo leerlo

Anatomía

El primer ejemplo bien documentado de este formato es una tabla-gráfico de la segunda mitad del siglo XX que ranqueaba países por un indicador económico en dos momentos distintos, con los nombres espaciados en proporción al valor exacto de cada uno. El nombre técnico del formato se acuñó bastante después de que empezara a usarse —una brecha común en la historia de estos gráficos, donde la idea suele circular mucho antes que su etiqueta. Una versión con más de dos columnas de tiempo, con las líneas cruzándose libremente entre varios rankings, puede considerarse una extensión directa del mismo principio, solo que con más puntos de comparación en la secuencia. Los nombres a cada lado se ubican a la altura exacta de su valor, no en una lista pareja, así que el ranking se lee directamente en la posición vertical de cada etiqueta.

Grieta diagonal en el pavimento que cruza entre dos franjas de pintura blanca paralelas, conectando un punto de la línea superior con uno de la inferior en un solo trazo recto: la misma anatomía de un slope graph, un único segmento diagonal que une el valor de una categoría entre dos momentos distintos

Por qué funciona

Fundamento perceptivo

La pendiente de cada línea comunica tanto la dirección como la magnitud del cambio. Los cruces de líneas muestran inversiones de ranking de forma inmediata.

Errores comunes

  • Solo funciona con dos momentos

    Un slope graph compara exactamente dos puntos en el tiempo por categoría, conectados por una línea recta cuya pendiente muestra la dirección y magnitud del cambio. Para tres o más momentos temporales, esa misma lógica de líneas conectando puntos se convierte en un gráfico de líneas normal, no en un slope graph.

  • Demasiadas líneas cruzándose

    Con más de 10 o 15 categorías, las líneas que conectan el valor inicial con el final empiezan a cruzarse entre sí con tanta frecuencia que seguir una categoría específica de un extremo al otro se vuelve difícil. Resaltar una o dos líneas de interés en color, dejando el resto en gris tenue de fondo, ayuda a que la comparación relevante no se pierda entre el resto.

  • Etiquetas de ambos extremos amontonadas

    Cuando varias categorías tienen valores muy parecidos en el mismo extremo (inicial o final), sus etiquetas de texto se apilan una encima de otra y se vuelven ilegibles. Un algoritmo simple de separación vertical de etiquetas —que las empuje lo mínimo necesario para no superponerse— resuelve la mayoría de estos casos sin alterar la posición real de los puntos.

Dónde se usa

Contextos de aplicación

Cambio de posiciones entre dos mediciones
01

Cambio de posiciones entre dos mediciones

Quién subió y quién bajó entre la primera y la segunda medición.

Variación de participación de mercado
02

Variación de participación de mercado

La pendiente de cada línea muestra quién ganó y quién perdió terreno.

Cambio en resultados de encuestas
03

Cambio en resultados de encuestas

Cada opción conecta su valor inicial con el final: la inclinación es la historia.

Cómo construirlo

El mismo gráfico, en 11 librerías open source

Cada librería resuelve las mismas decisiones de diseño, como la escala, el espaciado entre barras o la inserción de la etiqueta de valor, de un modo distinto. Algunas las automatizan; otras las dejan explícitas en el código, a criterio de quien lo escribe. Comparar once implementaciones con los mismos datos y el mismo color de marca aísla esa diferencia, que de otro modo queda oculta detrás de estilos visuales distintos.

Matplotlib License (estilo BSD)
Matplotlib: gráfico de barras

Sin función "slope": dos puntos conectados vía plot(), con las etiquetas puestas a mano junto a cada extremo con ax.text() —el posicionamiento es responsabilidad de quien escribe el código, no de la librería.

import matplotlib.pyplot as plt

series = [
    {"label": "Mujeres", "start": 9.4, "end": 8.5, "color": "#760D3E"},
    {"label": "Hombres", "start": 7.1, "end": 7.7, "color": "#D2601F"},
    {"label": "Total país", "start": 8.1, "end": 8.0, "color": "#9B928C"},
]

# Sin funcion "slope": dos puntos conectados via plot(), con las
# etiquetas puestas a mano junto a cada extremo (ax.text()).
fig, ax = plt.subplots(figsize=(6.5, 4))
for s in series:
    ax.plot([0, 1], [s["start"], s["end"]], color=s["color"], linewidth=2.5, marker="o")
    ax.text(-0.03, s["start"], f"{s['label']} {s['start']}%", ha="right", va="center", color=s["color"])
    ax.text(1.03, s["end"], f"{s['end']}%", ha="left", va="center", color=s["color"])
ax.set_xticks([0, 1]); ax.set_xticklabels(["Oct-dic 2024", "Oct-dic 2025"])
ax.set_yticks([])
plt.show()

Herramientas para construirlo

No-code, desktop y plataformas web, con su licencia visible, abierta o comercial.

No-code
Observable FreemiumDatawrapper FreemiumFlourish Freemium
JavaScript
D3.js Open Source
Python
Matplotlib Open Source
R
ggplot2 Open Source

Con datos reales

Ejemplos de uso.

La brecha de género en el desempleo se achica

Tasa de desocupación por sexo, trimestre oct-dic 2024 vs oct-dic 2025.

Oct-dic 2024Oct-dic 2025Mujeres (9,4%)8,5%Hombres (7,1%)7,7%Total país (8,1%)8%

Fuente: INE, Boletín Estadístico Empleo Trimestral N°327 (ENE)