Cuando se necesita comprar series de datos con escalas o unidades diferentes una de las mejores opciones son los gráficos con ejes secundarios. Mostrando los valores de una serie en el eje de la derecha y otra en la de la izquierda. Así, la persona que analiza el gráfico puede comparar las tendencias de ambas series sin los problemas de las dimensiones o escalas. En esta entrada, se explicará cómo se pueden crear gráficos con un eje secundario en matplotlib
y personalizar el resultado.
Importar las bibliotecas necesarias
Como es habitual, antes de poder hacer nada es necesario importar las bibliotecas necesarias. En esta ocasión se va a usar, además de matplotlib
, numpy
para procesar los datos.
import matplotlib.pyplot as plt import numpy as np
Crear el gráfico básico
En primer lugar, se puede comenzar con la creación de un gráfico básico solamente con una serie de datos. Antes de lo cual, se debe crear un conjunto de datos de ejemplo que represente la producción mensual de energía solar y eólica durante un año. En el siguiente código se crea una figura en la que se crean los datos y una gráfica con la serie de energía solar.
# Datos de ejemplo meses = np.arange(1, 13) # Meses del año energia_solar = np.array([30, 45, 50, 60, 70, 80, 90, 85, 75, 65, 50, 40]) # Energía solar en GWh energia_eolica = np.array([100, 95, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40]) # Energía eólica en GWh # Crear la figura y el eje principal fig, ax1 = plt.subplots() # Graficar la energía solar ax1.plot(meses, energia_solar, 'g-', marker='o') ax1.set_xlabel('Meses') ax1.set_ylabel('Energía Solar (GWh)', color='g') ax1.tick_params(axis='y', labelcolor='g') # Mostrar el gráfico plt.show()
En este ejemplo, meses
representa los meses del año, energia_solar
es la energía producida por energía solar, y energia_eolica
por energía eólica. Una vez definidos los datos, se crea un gráfico de línea para la energía solar en el eje izquierdo y fijando el color de la líneas y etiquetas en verde.
Agregar un eje secundario
Una vez creado el gráfico básico, para mostrar la producción de energía eólica, se agrega un eje secundario utilizando el método twinx()
. El ejemplo se muestra en el siguiente código.
# Crear la figura y el eje principal fig, ax1 = plt.subplots() # Graficar la energía solar ax1.plot(meses, energia_solar, 'g-', marker='o') ax1.set_xlabel('Meses') ax1.set_ylabel('Energía Solar (GWh)', color='g') ax1.tick_params(axis='y', labelcolor='g') # Crear un segundo eje que comparte el eje x con el primero ax2 = ax1.twinx() # Graficar la energía eólica ax2.plot(meses, energia_eolica, 'b-', marker='s') ax2.set_ylabel('Energía Eólica (GWh)', color='b') ax2.tick_params(axis='y', labelcolor='b') # Mostrar el gráfico plt.show()
En este ejemplo, el método twinx()
permite crear un segundo eje que comparte el mismo eje x, pero con un eje y independiente. Lo que permite representar datos con diferentes escalas o unidades, como en este caso.
Personalizar colores y etiquetas
En cualquier gráfico es importante, y más en los que tienen varias series, que los gráficos sean fácilmente distinguibles y que las etiquetas sean claras. Para lo que se puede añadir etiquetas para mejorar la legibilidad.
# Crear la figura y el eje principal fig, ax1 = plt.subplots() # Graficar la energía solar ax1.plot(meses, energia_solar, 'g-', marker='o', label='Energía Solar') ax1.set_xlabel('Meses') ax1.set_ylabel('Energía Solar (GWh)', color='g') ax1.tick_params(axis='y', labelcolor='g') # Crear un segundo eje que comparte el eje x con el primero ax2 = ax1.twinx() # Graficar la energía eólica ax2.plot(meses, energia_eolica, 'b-', marker='s', label='Energía Eólica') ax2.set_ylabel('Energía Eólica (GWh)', color='b') ax2.tick_params(axis='y', labelcolor='b') # Añadir leyenda para ambas líneas fig.legend(loc='upper left', bbox_to_anchor=(0.32, 0.28)) # Mostrar el gráfico plt.show()
En este ejemplo, se ha agregado una leyenda a cada una de las series que ayuda a identificar cada línea. Lo que facilita la lectura de los gráficos.
Ajustes finales
Finalmente, se pueden hacer ajustes finales como son los títulos y asegurar que los datos se representen con claridad.
# Crear la figura y el eje principal fig, ax1 = plt.subplots() # Graficar la energía solar ax1.plot(meses, energia_solar, 'g-', marker='o', label='Energía Solar') ax1.set_xlabel('Meses') ax1.set_ylabel('Energía Solar (GWh)', color='g') ax1.tick_params(axis='y', labelcolor='g') # Crear un segundo eje que comparte el eje x con el primero ax2 = ax1.twinx() # Graficar la energía eólica ax2.plot(meses, energia_eolica, 'b-', marker='s', label='Energía Eólica') ax2.set_ylabel('Energía Eólica (GWh)', color='b') ax2.tick_params(axis='y', labelcolor='b') # Añadir leyenda para ambas líneas fig.legend(loc='upper left', bbox_to_anchor=(0.32, 0.28)) # Título del gráfico plt.title('Producción de Energía Solar y Eólica durante el Año') # Ajustar el diseño para que no haya solapamientos fig.tight_layout() # Mostrar el gráfico plt.show()
En este ejemplo final, se ha añadido un título descriptivo y llamado al método tight_layout()
para evitar que las etiquetas se solapen, mejorando así el resultado final.
Conclusiones
Los gráficos con ejes secundarios en matplotlib
son una excelente opción para visualizar datos que cuentan con diferentes escalas o unidades. En esta entrada, se ha visto cómo crear un gráfico básico, añadir un eje secundario, personalizar colores y etiquetas, y realizar ajustes finales para obtener una mejor representación de los datos.