Dominando Múltiples Gráficas en la Misma Figura en Matplotlib
Published on
Crear visualizaciones de datos convincentes es una habilidad esencial en el mundo de la ciencia de datos. Una herramienta que es invaluable en esta búsqueda es Matplotlib, una biblioteca de Python construida específicamente para visualización de datos. En esta guía completa, profundizaremos en los detalles de cómo crear múltiples gráficas en la misma figura en Matplotlib. Esta capacidad es particularmente útil cuando necesitas comparar varias tendencias de datos en un lienzo unificado, mejorando aún más la claridad y legibilidad de tus visualizaciones de datos.
Lo Básico de las Múltiples Gráficas en Matplotlib
Antes de adentrarnos en visualizaciones más complejas, cubriremos los fundamentos de trazar múltiples líneas en la misma figura usando Matplotlib.
El módulo pyplot de Matplotlib facilita la creación de gráficos y trazados. Su sintaxis es notablemente similar a MATLAB, lo cual puede ser ventajoso para aquellos familiarizados con ese sistema. Para comenzar, aquí tienes un ejemplo simple que ilustra cómo crear una figura con dos líneas utilizando conjuntos de datos diferentes:
import matplotlib.pyplot as plt
# Datos de ejemplo
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
# Crear las gráficas
plt.plot(x, y1, 'b-', label='Ascendente')
plt.plot(x, y2, 'r-', label='Descendente')
# Incluir leyenda
plt.legend(loc='best')
# Mostrar la figura
plt.show()
En este ejemplo, plt.plot(x, y1, 'b-', label='Ascendente')
y plt.plot(x, y2, 'r-', label='Descendente')
trazan los conjuntos de datos y1 e y2 frente a x. Los argumentos 'b-' y 'r-' definen el color y tipo de línea (azul y rojo, respectivamente), mientras que 'Ascendente' y 'Descendente' sirven como etiquetas para la leyenda. La llamada a la función plt.legend(loc='best')
coloca la leyenda en la ubicación que se superpone menos con las líneas trazadas.
Más Gráficas, Mayor Complejidad: API Orientada a Objetos de Matplotlib
Si bien la técnica mencionada anteriormente es sencilla y efectiva para gráficas simples, puede ser limitante al tratar con visualizaciones más complejas. Aquí es donde entra en juego la API orientada a objetos de Matplotlib. Al crear objetos Figure y Axes, obtienes un mayor control sobre los elementos de la gráfica. Así es cómo puedes usar esta API para lograr el mismo resultado que antes:
# Crear un nuevo objeto Figure y Axes
fig, ax = plt.subplots()
# Trazar los datos en los Axes
ax.plot(x, y1, 'b-', label='Ascendente')
ax.plot(x, y2, 'r-', label='Descendente')
# Incluir leyenda
ax.legend(loc='best')
# Mostrar la figura
plt.show()
Descifrando el Código: Entendiendo el Enfoque Orientado a Objetos
Tal vez te preguntes: ¿por qué alguien usaría la API orientada a objetos más verbose cuando el módulo pyplot más simple hace el trabajo? A medida que tus visualizaciones se vuelven más sofisticadas, la respuesta se vuelve evidente. El uso de los objetos Figure y Axes te brinda un mayor grado de control sobre tus gráficas. Permite una personalización que la interfaz pyplot más simple no proporciona fácilmente.
Considera los objetos Figure y Axes como contenedores para tu gráfica. El objeto Figure es la ventana o página general en la que se dibuja todo. Puede contener varios objetos Axes. Cada objeto Axes, a su vez, es una gráfica distinta con sus propios elementos (líneas, leyendas, etiquetas, etc.).
Con este entendimiento, puedes ver que el enfoque orientado a objetos sienta una base sólida para visualizaciones múltiples más complejas, que exploraremos en las siguientes secciones.
Múltiples Subgráficas: Más de un Axes en una Figura
Hemos cubierto cómo trazar múltiples líneas en un mismo objeto Axes, pero ¿qué pasa si queremos comparar subgráficas completamente separadas en la misma Figura? La función subplots()
de Matplotlib proporciona una forma eficiente de lograr esto. La función subplots()
crea una nueva Figura y varios objetos Axes de una vez, devolviéndolos para su uso. Veamos cómo generar cuatro subgráficas, dos filas y dos columnas, en la misma Figura:
# Crear una nueva Figura con una cuadrícula 2x2 de Axes
fig, axs = plt.subplots(2, 2)
# Definir algunos datos de ejemplo
x = [1, 2, 3, 4, 5]
y = [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [6, 5, 4, 3, 2]]
# Trazar los datos en cada Axes
for i, ax in enumerate(axs.flatten()):
ax.plot(x, y[i])
# Mostrar la figura
plt.show()
En este caso, plt.subplots(2, 2)
crea una cuadrícula 2x2 de Axes, y axs.flatten()
se utiliza para iterar sobre estos Axes en un sencillo bucle for.
Múltiples Ejes Y: Cuando un Solo Eje Y no es Suficiente
A veces, necesitas trazar diferentes conjuntos de datos que tienen escalas o unidades diferentes en la misma gráfica. Usar dos ejes y diferentes en la misma gráfica es una solución perfecta para este tipo de casos. Con la API orientada a objetos de Matplotlib, esto es sencillo:
# Crear una nueva Figura y Axes
fig, ax1 = plt.subplots()
# Crear un segundo Axes que comparte el mismo eje x
ax2 = ax1.twinx()
# Trazar datos en cada Axes
ax1.plot(x, y1, 'b-', label='Conjunto de Datos 1')
ax2.plot(x, y2, 'r-', label='Conjunto de Datos 2')
# Establecer etiquetas de ejes y
ax1.set_ylabel('Conjunto de Datos 1', color='b')
ax2.set_ylabel('Conjunto de Datos 2', color='r')
# Mostrar la figura
plt.show()
En este caso, ax1.twinx()
crea un nuevo Axes que comparte el eje x con ax1 pero tiene un eje y separado.
Alternativa a Matplotlib: Visualización de Datos con PyGWalker
Además de usar Matplotlib para visualizar tu marco de datos de pandas, aquí tienes una alternativa, una biblioteca de Python de código abierto que puede ayudarte a crear visualizaciones de datos fácilmente: PyGWalker (opens in a new tab).
(opens in a new tab) No es necesario completar procesamientos complicados con programación en Python, simplemente importa tus datos y arrastra y suelta variables para crear todo tipo de visualizaciones de datos. Aquí tienes un video de demostración rápida sobre el funcionamiento:
Así es cómo usar PyGWalker en tu Jupyter Notebook:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
Alternativamente, puedes probarlo en Kaggle Notebook / Google Colab:
PyGWalker se construye con el apoyo de nuestra comunidad de código abierto. ¡No olvides visitar PyGWalker en GitHub (opens in a new tab) y darnos una estrella!
Conclusión
Dominar el arte de crear múltiples gráficos en la misma figura en Matplotlib puede llevar tus habilidades de visualización de datos a un nivel completamente nuevo. Al comprender los conceptos básicos y aventurarte gradualmente en territorio más complejo, puedes utilizar Matplotlib de manera efectiva para dar vida a tus datos.
Preguntas frecuentes
- ¿Cuáles son los beneficios de crear múltiples gráficos en la misma figura en Matplotlib?
Tener múltiples gráficos en la misma figura puede mejorar significativamente tu visualización de datos. Esta capacidad permite comparar datos de manera más sencilla, ya que puedes analizar múltiples tendencias de datos en un solo lienzo. También mejora la claridad y legibilidad de tus representaciones de datos.
- ¿Cuándo debería utilizar la API orientada a objetos de Matplotlib?
Si bien el módulo pyplot es sencillo y útil para gráficos simples, la API orientada a objetos de Matplotlib es más adecuada para visualizaciones complejas. Al interactuar directamente con los objetos Figures y Axes, obtienes un control más preciso sobre los elementos del gráfico, lo cual es invaluable cuando tus visualizaciones requieren un mayor grado de personalización.
- ¿Cuál es el propósito de tener múltiples ejes Y en un solo gráfico?
Tener múltiples ejes Y es particularmente útil cuando quieres representar diferentes conjuntos de datos que tienen escalas o unidades diferentes en el mismo gráfico. Al asignar cada conjunto de datos a su eje Y, puedes representar eficazmente estas diferentes escalas o unidades sin distorsionar ni tergiversar tus datos.