Un tema que suele confundir al usuario de matplotlib es la variedad de métodos que hay para conseguir un objetivo. Y es que matplotlib ofrece dos interfaces de programación (digamos, dos estilos distintos para crear y personalizar las gráficas): un estilo denominado "MATLAB" (pues se asemeja a la interfaz de este software) y otro denominado "orientado a objetos".
Interfaz estilo MATLAB
Python fue desarrollado como una alternativa a MATLAB para usuarios de Python, y esto queda en evidencia cuando analizamos el conjunto de herramientas ofrecidas en este estilo de programación. La mayor parte de estas herramientas se ofrecen como funciones de la sublibrería pyplot (que hemos importado con el alias plt). Veamos un ejemplo:
Estas dos gráficas se han creado usando funciones de matplotlib.pyplot. Es importante destacar que una vez que se ha personalizado el primer conjunto de ejes y la primera gráfica (la de la izquierda) y hemos comenzado a crear el segundo conjunto de ejes (el del histograma de la derecha), ya no hay forma de modificar nada de la primera gráfica, pues matplotlib mantiene lo que podemos denominar unos "ejes actuales" y, una vez se crea el segundo conjunto de ejes, esos "ejes actuales" pasan a ser los nuevos y, usando esta interfaz, no hay forma alguna de volver a referenciar los anteriores.
Interfaz orientada a objetos (OO)
Utilizando este segundo estilo, vamos a referenciar la figura y los ejes mediante variables y serán métodos y atributos de estas variables los que nos permitirán personalizar la visualización. Por ejemplo, el código equivalente a la figura anterior sería el siguiente:
En este caso, las variables fig y ax nos servirán para personalizar todas las gráficas a crear en la figura. Vemos que la única función que hemos utilizado ha sido la primera, plt.subplots, para crear la figura y los dos conjuntos de ejes (bueno, y plt.show), y el resto de instrucciones son métodos que ejecutamos sobre dichos objetos.
La mayor parte de los métodos que nos permiten fijar un valor a un atributo comienza por "set_". Estos métodos suelen tener un método equivalente que comienza habitualmente por "get_" que sirve para leer el valor de dicho atributo.
Este segundo estilo orientado a objetos nos da mayor control sobre las visualizaciones que creemos. En el resto del tutorial utilizaremos ambos enfoques, especificando -allí donde se considere apropiado- la forma en la que cada uno de los estilos obtiene un objetivo.