Esta biblioteca es una de las varias que existen para realizar gráficos en Python. No es la única, pero es sin duda la más usada.
Ventajas:
Muchas información en https://matplotlib.org/
Y una cantidad impresionante de ejemplos (con el código para usarlo en un dibujo similar) en: https://matplotlib.org/stable/plot_types/index.html
Y diagramas para referencias rápidas en: https://matplotlib.org/cheatsheets/
Para usarlo hay que cargar NumPy de manera Obligatoria
Matplotlib se construyó para su uso sobre NumPy
Algunos de los ejemplos presentados en este capítulo fueron tomados de https://matplotlib.org/stable/gallery/
pyplot es lainterfase a la biblioteca de matplotlib. Pyplot está diseñada siguiendo el estilo de un lenguaje llamado Matlab que fue muy exitoso en ingeniería y ciencia. Por lo cual a Matplotlib se accede a traves de pyplot con el siguiente comando:
import matplotlib.pyplot as plt
Es decir de matplotlib cargamos pyplot para usarla esta biblioteca y sus funciones, vemos un ejemplo:
import numpy as np
import matplotlib.pyplot as plt # Esta es la biblioteca para graficar
plt.rcParams["figure.figsize"] = (4,2.5) # <- Este comando es para que la
# versión impresa de este notebook
# tenga las dimensiones
# correctas, el lector debe
# ignorarlo.
Hay mucha información de como usar esta biblioteca en la página oficial: http://matplotlib.org/
Veamos que Matplotlib es muy fácil de usar y en este caso utilizaremos la función "plot()"
x = np.arange(10) # defino un arreglo para tener un referencia
y dibujo $f(x)=x^3$ de una manera compacta.
plt.plot(x, x**3); # El ";" al final es para que no me salga una
# descripción del objeto estilo
# [<matplotlib.lines.Line2D at 0x7fbd28b9b590>]
Cómo pueden ver en el ejemplo, este gráfico nos llevó sólo una línea de código.
El método plot de matplotlib, necesitó la abscisa que es el arreglo NumPy x y la ordenada que es el resultado del cálculo de $f(x)=x^3$, que se realizó al vuelo mientras se corrió el código. Note que no se hizo indicación alguna del tipo de línea, color o punto en el dibujo. Es decir se cargaron valores "default" pre-programados.
Hay modos compactos de órdenes para modificar el gráfico, veamos algunas.
Y también podemos superponer gráficos
plt.plot(x,x**2,':g') #<--- determina la línea
plt.plot(x,x**2,'ob'); #<--- determina los puntos
En este ejemplo, se generaron dos gráficos, uno por línea de código. En la primera línea, se agrego ':g' que significa en un modo muy compacto ":" línea de puntos y "g" color verde (la g es de green). En la segundo línea ahora el "o" indica un punto lleno y "b" color azul (la b es de blue)
Note que la segunda orden no une puntos, y es entonces un gráfico de puntos discretos (no conectados o "scatter" en inglés)
También podría haber utilizado una orden no tan compacta y ser más descriptivo de lo que estoy programando.
plt.plot(x, x**2, c='green', marker='^');
En este ejemplo pueden ver que el color y el símbolo se pueden poner también modos no tan comprimidos y más claros para el lector del código. "c" o "color" indicará el color y "marker" el símbolo para marcar los puntos en el dibujo.
# Para ver como usar la ventana interactiva:
%matplotlib tk
plt.plot(x, x**2, '*b');
Corriendo este ejemplo ahora la ventana del gráfico se va del Notebook hacia el escritorio de la computadora. Este se debe al uso del comando "%matplotlib tk"
que lo puedo revertir con la orden que sigue:
# volviendo al inline graphics mode
%matplotlib inline
plt.rcParams["figure.figsize"] = (4,2.5)
# Genero dos arreglos NumPy
x = np.linspace(0, 20, 100) # 100 valores separados de 0 to 20
y = np.sin(x)
# y los dibujo, pero en el segundo realizo otro cálculo en los valores de la ordenada.
plt.plot(x, y)
plt.plot(x, y**2);
Veamos este dibujo:
plt.plot(x, y);
Pero resulta que quiero que sea entre 0, y 4$\pi$, o que la ordenada este en el rango (-1.5,1)
Tengo que fijar entonces estos límites en ambos ejes. para ello uso los siguientes comandos: xlim, e ylim.
Si no los uso, el gráfico se realizará con valores "default" determinados por el propio Python
plt.plot(x, y)
plt.xlim((0., 4*np.pi))
plt.ylim((-1.5,1.5))
plt.plot(x, y)
plt.xlim((0., np.pi*2))
plt.plot(x, y)
plt.xlim((0., np.pi*3))
No funcionó, sólo veo el último dibujo. El primero se me perdió.
Si tengo más de una figura en una celda, tengo que "cerrar" el primero para que se grafique en la pantalla. Si no lo hago sólo veré el último de estos. Para cerrar el dibujo tengo que usar el comando "plt.show( )"
plt.plot(x, y)
plt.xlim((0., np.pi*2))
plt.show()
plt.plot(x, y)
plt.xlim((0., np.pi*3))
plt.show()
Para ello se utiliza el comando plt.title('texto') donde como string de texto se escribe el título. Los nombres de cada eje se indican con los comandos plt.xlabel('texto') y plt.ylabel('texto') para cada eje respectivamente.
plt.plot(x, y)
plt.xlim((0., np.pi*2))
plt.title('Sen(x) entre 0 y $2\pi$')
plt.xlabel('x')
plt.ylabel('f(x)');
help(plt.plot)
A cada curva o puntos específicos dentro de una figura se los puede diferenciar con una leyenda que se escribe con el comando que los dibuja. Y luego al final, indicando el lugar de la figura donde se pondrá esta leyenda.
x = np.linspace(0, 20, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, '-b', label='seno')
plt.plot(x, y2, '-r', label='coseno')
plt.legend(loc='upper right')
plt.ylim((-1.5, 2.0));
En este caso indicamos con rojo el $\sin(x)$ en azul y el $\cos(x)$ en rojo. Luego la leyenda la dibujamos arriba ("upper") y a la derecha ("right") con el comando plt.legend( ).
Afortunamente la gente de Matplotlib a generado este dibujo que da nombre a las partes de un gráfico del tipo de los que se usan ciencia. Con estos nombres es muy fácil buscar (o adivinar) el comando que se necesita para su modificación para que el dibujo quede a gusto del usuario o bien de los requerimientos de las revistas o congresos.