Combinar varios gráficos en una sola figura es una habilidad fundamental cuando necesitas comparar datos de forma visual y eficiente. Con GridSpec de Matplotlib puedes diseñar layouts personalizados donde cada subplot ocupa un tamaño y posición específicos dentro de una cuadrícula, logrando resultados mucho más profesionales que con métodos básicos.
¿Qué es GridSpec y por qué usarlo para subplots?
El término GridSpec proviene de grid (cuadrícula) y specification (especificación). Es un módulo de Matplotlib que permite definir una cuadrícula con filas y columnas, y luego asignar cada gráfico a posiciones específicas dentro de ella [0:55]. A diferencia de plt.subplots() convencional, GridSpec ofrece control total sobre las proporciones de altura y ancho de cada celda.
Para importarlo se utiliza:
python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
Esta importación adicional es la clave para acceder a las funcionalidades de diseño avanzado [1:07].
¿Cómo preparar los datos antes de graficar?
Antes de construir el layout, se generan los datos que alimentarán cada gráfico. En el ejemplo se crean dos conjuntos [2:18]:
- Datos para la función seno: se usa
np.linspace(0, 10, 100) que genera un arreglo de cien valores igualmente espaciados entre cero y diez. Luego se calcula y = np.sin(x).
- Datos para el histograma: se usa
np.random.random(100) que genera cien números aleatorios entre cero y uno.
python
x = np.linspace(0, 10, 100)
y = np.sin(x)
datos = np.random.random(100)
¿Cómo se configura la cuadrícula con GridSpec?
La cuadrícula se define especificando el número de filas y columnas, junto con las proporciones de cada una [3:15]:
python
gs = gridspec.GridSpec(2, 2, height_ratios=[2, 1], width_ratios=[1, 1])
fig = plt.figure(figsize=(10, 8))
height_ratios=[2, 1]: la primera fila ocupa el doble de altura que la segunda.
width_ratios=[1, 1]: ambas columnas tienen el mismo ancho.
figsize=(10, 8): establece el tamaño total de la figura en pulgadas.
¿Cómo incrustar cada gráfico en la posición correcta?
Cada subplot se añade a la figura indicando su posición dentro del objeto gs. El sistema de indexación funciona como coordenadas de fila y columna [5:10].
Primer subplot — seno completo (fila superior, ambas columnas):
python
ax1 = fig.add_subplot(gs[0, :])
ax1.plot(x, y, color='blue')
ax1.set_title('Seno de X')
ax1.set_xlabel('X')
ax1.set_ylabel('Seno de X')
La notación gs[0, :] significa fila cero, todas las columnas, por lo que el gráfico ocupa toda la primera fila.
Segundo subplot — histograma (esquina inferior izquierda):
python
ax2 = fig.add_subplot(gs[1, 0])
ax2.hist(datos, bins=20, color='purple', edgecolor='black')
ax2.set_title('Histograma')
ax2.set_xlabel('Valor')
ax2.set_ylabel('Frecuencia')
Aquí gs[1, 0] ubica el histograma en la fila uno, columna cero [7:02]. El parámetro bins define veinte divisiones y edgecolor añade borde negro a cada barra.
Tercer subplot — dispersión del seno (esquina inferior derecha):
python
ax3 = fig.add_subplot(gs[1, 1])
ax3.scatter(x, y, color='red')
ax3.set_title('Dispersión de Seno')
ax3.set_xlabel('X')
ax3.set_ylabel('Seno de X')
Con gs[1, 1] se completa el cuarto cuadrante de la cuadrícula [8:30].
¿Cómo evitar la superposición entre gráficos?
Una vez definidos todos los subplots, es importante llamar a plt.tight_layout() antes de plt.show() [10:05]. Esta función ajusta automáticamente los márgenes y el espaciado para que títulos y etiquetas no se solapen:
python
plt.tight_layout()
plt.show()
¿Qué consideraciones tener al trabajar con celdas en notebooks?
Cuando trabajas en Google Colab o Jupyter, Matplotlib guarda el estado de la figura en el momento de su creación. Si defines la figura en una celda y los subplots en otra, la referencia puede perderse [10:20]. La recomendación es mantener toda la configuración y los gráficos en la misma celda para que el resultado se renderice correctamente.
El resultado final muestra un gráfico grande del seno en la parte superior y dos gráficos más pequeños en la parte inferior: el histograma a la izquierda y el scatter plot a la derecha. Ahora puedes experimentar añadiendo cuatro o más gráficos, modificando las proporciones de la cuadrícula y combinando distintos tipos de visualización. ¿Qué combinación de gráficos te resulta más útil para tus datos?