La función subplots

La función matplotlib.pyplot.subplots crea una figura y uno (o varios) conjunto de ejes, devolviendo una referencia a la figura y a los ejes. Por defecto -si no se especifica otra cosa- crea un único conjunto de ejes:

Creación de ejes

En este caso, la variable ax es una referencia a un objeto tipo AxesSubplot:

Creación de ejes

Si queremos crear una matriz de conjuntos de ejes de, por ejemplo, 2 filas y 3 columnas (es decir, 6 conjuntos de ejes repartidos de dicha forma), basta añadir estos valores como primeros argumentos de la función:

Matriz de 3x2 conjuntos de ejes

(se ha aumentado el tamaño de la figura para poder visualizar correctamente los 6 conjuntos de ejes).

Obsérvese que los ejes son creados y mostrados, aun cuando no se creen gráficas dentro de ellos.

Vemos en la siguiente imagen que, en este caso, ax es un array NumPy, de tamaño 3x2, conteniendo referencias a cada uno de los ejes:

Referencias a los ejes creados

Ahora podríamos ejecutar el método plot asociado a cada uno de estos ejes para mostrar una gráfica. Por ejemplo, si quisiéramos mostrarla en la segunda fila (cuyo índice es 1) y primera columna (cuyo índice es 0), podríamos hacerlo del siguiente modo:

Creación de una gráfica en un conjunto de ejes

Las dos siguientes instrucciones son equivalentes:

fig, ax = plt.subplots()

fig, ax = plt.subplots(1, 1)

Es decir, en el segundo caso no se devuelve una lista formada por un único elemento, sino el elemento directamente.

Dos parámetros interesantes de la función subplots son sharex y sharey. Éstos controlan la compartición de las propiedades de los ejes. Por defecto toman el valor False, lo que supone que cada conjunto de ejes es independiente. Si, por ejemplo, el argumento sharex se fija a True, todos los ejes x de los diferentes conjuntos de ejes compartirán las mismas propiedades. Veámoslo en la práctica con una matriz de 2x2 conjuntos de ejes:

Los atributos sharex y sharey

Comprobamos cómo los ejes horizontales son mostrados solo en la parte inferior de la figura, indicando que los situados por encima de éstos comparten dicho eje.

El equivalente para el eje y es el que podemos ver en la siguiente imagen:

Los atributos sharex y sharey

Ahora, los ejes y son mostrados solo en los conjuntos de ejes de la primera columna.

Si fijamos a True ambos parámetros:

Los atributos sharex y sharey

...vemos que los ejes son mostrados en la primera columna y en la última fila, indicando que el resto de los conjuntos de ejes comparten dichos ejes.

Pero hay otras opciones. Así, por ejemplo, si el argumento sharex toma el valor "row", indicamos que cada fila de nuestra matriz compartirá el mismo eje x, y si toma el valor "col", indicamos que cada columna de nuestra matriz compartirá el mismo eje x. Y lo mismo ocurre con el argumento sharey, que puede tomar los valores "row" o "col" indicando que cada fila o cada columna compartirá el eje y.