Introducción a Matplotlib

Estándar

En la entrada anterior, dimos una introducción a las librerías disponibles para representar gráficas en Python. En esta entrada veremos el funcionamiento básico de la primera librería propuesta, Matplotlib. Concretamente, crearemos tres tipos de gráficas: una gráfica de líneas, una de barras y una circular.

Empezaremos creando los datos para la gráfica de líneas. En este caso, representaremos una función seno usando la librería Numpy. Las gráficas de líneas se suelen usar en casos en los que una (o varias) variables dependientes se representan en función de una variable independiente.
Un ejemplo típico son las variables que cambian en función del tiempo o de la distancia. Normalmente, la variable independiente es continua.

In [1]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0,2*np.pi,0.01)
y = np.sin(x)

Con la llamada a np.arange() hemos creado un rango de 0 a 2 pi con un paso de 0.01. A continuación llamamos a np.sin() para calcular el seno y obtenemos un array de salida. Tenemos dos variables, x e y que contienen los valores del eje y de la función en cada punto. Ahora procedemos a representar la gráfica con Matplotlib.

In [2]:
plt.figure()
plt.plot(x,y)
plt.legend(['sin(x)'])
plt.show()

Hemos creado una figura nueva (como haríamos en Matlab) en primer lugar. A continuación, hemos creado la gráfica de líneas y hemos añadido una leyenda para la única variable dependiente. Finalmente, hemos indicado a Matplotlib que dibuje la gráfica en pantalla (en este caso, dado que trabajamos en Jupyter y hemos usado %matplotlib inline, la gráfica se dibujará en la libreta).

Ahora vamos a representar una gráfica de barras. Estas gráficas se usan para comparar los valores de una variable sobre un conjunto finito (idealmente pequeño) de clases diferentes. Por ejemplo, podemos mostrar el número de medallas de oro ganadas por los países más premiados en todos los Juegos Olímpicos.

In [3]:
top_5 = ['EEUU','URSS','GB','Francia','China']
medallas = [976, 395, 236, 202, 201]

Este es el formato que deben tener los datos para poder dibujar la gráfica. Daremos por sentado que los tenemos apropiadamente formateados, aunque no suele ser el caso (normalmente vendrá dado en forma de objeto DataFrame o archivo CSV) y tampoco es recomendable usar los datos en listas separadas. Ahora dibujaremos la gráfica de barras. El código no es muy bonito...

In [4]:
plt.figure()
plt.bar(range(5),medallas, align='center')
ax = plt.gca()
ax.set_xticks(range(5))
ax.set_xticklabels(top_5)
plt.show()

En la primera línea, creamos una nueva figura. A continuación, dibujamos la gráfica de barras. Necesitamos algunos valores para el eje, por lo que llamamos a la función range(5), que crea una lista de enteros entre 0 y 4, y que se usará como el primer argumento en la llamada a plt.bar(). El segundo argumento son nuestros datos, y el tercero indica que cada barra debe estar centrada sobre la marca (el número entre 0 y 4 correspondiente a cada valor). El siguiente paso es cambiar estas marcas por los nombres de los países. Para ello necesitamos tener acceso al eje con la línea ax = plt.gca(). Con el eje, necesitamos volver a indicar las marcas llamando a ax.set_xticks(range(5)), para evitar un desalineamiento en los nombres de los países. Finalmente hacemos el cambio y pintamos la gráfica.
Este código no es simple. A menudo, el trabajo con Matplotlib comprende recurrir a la documentación y a procesos de prueba y error hasta obtener los resultados adecuados (al menos hasta que se tenga un dominio adecuado y algo de experiencia).

Por útlimo, haremos un ejemplo con una gráfica circular (o de sectores). Éstas se suelen usar en casos en los que se quiere representar cómo se divide una cantidad total entre varias clases. Por ejemplo, son comunes en la representación de resultados electorales, o para representar el reparto de los usuarios en el mercado de los navegadores web. Usaremos los datos de Noviembre de 2015.

In [5]:
navegadores = ['Chrome', 'Firefox', 'IE', 'Safari', 'Opera']
usuarios = [67.4, 19.2, 6.8, 3.9, 1.5]

Estos datos no suman el 100%, por lo que faltan datos. Supondremos que el porcentaje que falta es para otros navegadores.

In [6]:
navegadores.append('otros')
usuarios.append(100-sum(usuarios))

Con esto, procedemos a dibujar el gráfico.

In [7]:
plt.figure()
plt.pie(usuarios,labels=navegadores)
plt.show()

Nuevamente, creamos la figura primero, y llamamos luego al método plt.pie(), pasando como primer argumento los datos y como segundo la etiqueta de cada valor. Luego pintamos la gráfica en pantalla.
Los colores pueden no ser muy representativos de cada navegador, pero eso será algo que resolveremos en la siguiente entrada.

En esta entrada hemos visto un ejemplo básico de tres tipos de gráficos en Matplotlib. Hay muchos otros tipos, pero nos llevaría una web completa para verlos todos. Los resultados con un código mínimo son demasiado básicos, por lo que hará falta que veamos cómo mejorar la presentación en la siguiente entrada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *