Creación de Gráficos Combinados en Matplotlib con GridSpec

Clase 28 de 32Curso de Python para Ciencia de Datos

Contenido del curso

NumPy

Pandas

Resumen

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?