Este grafico bump conecta las posiciones de ventas por trimestre. El truco es invertir el eje para que los rangos altos queden arriba.
import numpy as np
import matplotlib.pyplot as plt
quarters = ["Q1", "Q2", "Q3", "Q4"]
brands = ["Alpha", "Bravo", "Charlie", "Delta", "Echo"]
ranks = np.array(
[
[1, 2, 3, 3],
[3, 1, 1, 2],
[2, 3, 2, 1],
[4, 4, 5, 4],
[5, 5, 4, 5],
]
)
fig, ax = plt.subplots(figsize=(7, 4))
for brand, rank in zip(brands, ranks):
ax.plot(quarters, rank, marker="o", linewidth=2, label=brand)
ax.set_ylim(5.5, 0.5)
ax.set_ylabel("Ranking")
ax.set_title("Ranking de ventas por marca")
ax.grid(axis="y", alpha=0.2)
ax.legend(loc="upper right", bbox_to_anchor=(1.15, 1))
fig.tight_layout()
plt.show()

Consejos de lectura #
- Como un numero menor indica mejor posicion, invertir el eje hace la lectura mas intuitiva.
- Usa colores y marcadores para distinguir marcas, y coloca la leyenda a la derecha para evitar solapamientos.
- Si necesitas destacar una marca, aumenta el grosor o ajusta el color.