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:
En este caso, la variable ax es una referencia a un objeto tipo AxesSubplot:
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:
(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:
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:
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:
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:
Ahora, los ejes y son mostrados solo en los conjuntos de ejes de la primera columna.
Si fijamos a True ambos parámetros:
...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.