Al realizar un análisis de datos, a menudo necesitamos comparar la evolución de dos series de datos relacionadas entre sí, pero con escalas completamente diferentes. Por ejemplo:
- Comparar la temperatura promedio de una región con las ventas de helados en la misma.
- Analizar el volumen de lluvia mensual frente al crecimiento agrícola.
Un gráfico tradicional con un solo eje Y no puede mostrar correctamente ambos conjuntos de datos debido a las diferencias existentes en las escalas de los mismos. Por ejemplo, mientras la temperatura esté en decenas de grados, las ventas de helados tendrán valores de miles o millones de euros. Por eso, si intentamos superponer estas series, una podría dominar el gráfico, haciendo que el otro pase desapercibido.
Para resolver este tipo de problemas, Matplotlib ofrece la función twinx(), que permite agregar un segundo eje Y al mismo gráfico. Este método es ideal para mostrar datos con diferentes escalas en una única visualización, conservando claridad y precisión.
En esta entrada, explicaremos cómo usar twinx(), implementarlo con ejemplos prácticos y personalizarlo para tus necesidades.
Tabla de contenidos
Para qué sirve twinx() de Matplotlib
La función twinx() de Matplotlib permite crear un segundo eje Y en un gráfico existente. Este nuevo eje comparte el eje X con el gráfico original, pero tiene su propia escala independiente. Lo que facilita:
- Superponer dos gráficos diferentes con escalas Y distintas.
- Facilitar la comparación visual de datos relacionados.
Ventajas de usar twinx() en Matplotlib
Algunas de las ventajas que ofrece el uso de twinx() de Matplotlib es nuestros gráficos son:
- Claridad visual: Ambos conjuntos de datos se presentan en el mismo espacio visual, pero con escalas separadas.
- Personalización: Cada eje Y puede tener etiquetas, colores y estilos propios.
- Eficiencia: Permite comparar series relacionadas sin necesidad de gráficos separados.
Ejemplo práctico: Comparar temperatura y ventas de helados
Imaginemos un conjunto de datos que contiene las temperaturas promedio y las ventas de helados por mes en un año. El siguiente código muestra cómo definir los valores y crear una gráfica con estas características.
import matplotlib.pyplot as plt
# Datos ficticios
meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"]
temperaturas = [5, 7, 12, 18, 22, 27, 30, 28, 24, 18, 12, 7]
ventas_helados = [200, 250, 300, 500, 700, 900, 1200, 1100, 800, 400, 300, 250]
# Crear la figura y el primer eje
fig, ax1 = plt.subplots()
# Graficar la temperatura en el primer eje
ax1.plot(meses, temperaturas, color='blue', marker='o', label="Temperatura (°C)")
ax1.set_xlabel("Meses")
ax1.set_ylabel("Temperatura (°C)", color='blue')
ax1.tick_params(axis='y', labelcolor='blue')
# Crear un segundo eje Y compartiendo el eje X
ax2 = ax1.twinx()
ax2.plot(meses, ventas_helados, color='red', marker='s', label="Ventas de helados")
ax2.set_ylabel("Ventas de helados", color='red')
ax2.tick_params(axis='y', labelcolor='red')
# Títulos y leyendas
plt.title("Relación entre temperatura y ventas de helados")
fig.tight_layout()
plt.show()Obteniendo como resultado una gráfica donde el eje Y izquierdo muestra la escala de temperatura (°C), mientras que el eje Y derecho muestra la escala de ventas de helados. Ambos gráficos comparten el eje X con los meses del año, como se puede ver en la siguiente figura.

Personalización de twinx()
Como casi todas las funciones de Matplotlib existen múltiples opciones de personalización para adaptar la salida a nuestras necesidades concretar.
Usar diferentes estilos para cada eje
Puedes personalizar los colores, las líneas y los marcadores para diferenciar claramente ambos conjuntos de datos.
# Personalizar estilos ax1.plot(meses, temperaturas, color='blue', linestyle='--', linewidth=2, marker='o', label="Temperatura (°C)") ax2.plot(meses, ventas_helados, color='red', linestyle='-', linewidth=2, marker='s', label="Ventas de helados")
Agregar leyendas específicas para cada eje Y
Las leyendas pueden ayudar a interpretar gráficos con múltiples ejes, por eso se puede agregar una leyenda específica a cada eje.
# Agregar leyendas específicas ax1.legend(loc='upper left') ax2.legend(loc='upper right')
Conclusiones
El uso de twinx() en Matplotlib es una gran opción para comparar datos con diferentes escalas en un solo gráfico. Desde el análisis de tendencias climáticas hasta la exploración de relaciones económicas, esta herramienta permite crear visualizaciones claras y efectivas que destacan la relación entre variables.

Deja una respuesta