Gráficos con Python: Matplotlib

06/05/2017 | Author: Eduardo Enriquez

Matplotlib es una muy buena herramienta para empezar a acercarse a los gráficos de 2 dimensiones con Python. Se puede usar dentro de un script, con ipython o con jupyter.  Se pueden generar plots, histograms, power spectra, bar charts, errorcharts, scatterplots, etc. Como toda libreria/biblioteca de Python, su instalación es sencilla:

sudo pip install matplotlib

O si estamos dentro de un virtualenv:

pip install matplotlib

El proyecto se puede forkear desde github: github.com/matplotlib/matplotlib Y la web es:  https://matplotlib.org/ Con matplotlib.plyplot podemos sacar un gráfico con pocas lineas de código y se estila importarlo con un alias: plt. Así que el import nos queda: import matplotlib.plyplot as plt. Un ejemplo de un grafico sería:

import matplotlib.pyplot as plt

# valores para el eje x
anios = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
# valores para el eje y
pbi = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]

plt.plot(
    anios, # valores del eje x, mi dominio
    pbi, # valores del eje y, mi codominio
    color="green", # color para el grafico
    marker='o', # valor opcional si queremos dibujar el entrecruzamiento, puede ir una "x"
    linestyle='solid'
)

# un titulo para nuestro grafico
plt.title("PBI nominal")

# una etiqueta para el eje y
plt.ylabel('Millones de pesos')

# mostramos el grafico
plt.show()

Esto generará el siguiente gráfico:

Pero también, como dijimos, matplotlib permite gráficos de barras. El unico tema es que nuestra lista de cosas a graficar debe ser de tipo numerico, asi que en vez de pasarle a matplotlib las peliculas, le vamos a pasar sus posiciones (con una magia en numpy):

import numpy as np
import matplotlib.pyplot as plt

peliculas = ["Annie Hall", "Ben-Hur", "Casablanca", "Gandhi", "West Side Story"]
num_oscars = [5, 11, 3, 8, 10]

# Acá hay una linea rara: en vez de usar el range que viene con Python utilizamos el range
# de numpy porque nos permite hacer rangos con decimales. Y queremos un rando de decimales
# para que quede más lindo el grafico. Si quieren pueden probar con la siguiente 
# linea comentada: 
# positions = range(len(peliculas))
positions = [x for x in np.arange(0.1, 5.1, 1)]

# Queremos que nuestro grafico muestre la cantidad de oscar de cada pelicula
# pero cada pelicula debe ser referenciada con un numero, la 1 es Annie Hall
# la 2 es Ben-Hur, etc. Por esto le pasamos las posiciones en vez de las peliculas
plt.bar(positions, num_oscars)

# Agregamos la etiqueta para el eje y el titulo del grafico
plt.ylabel("# of Academy Awards")
plt.title("My Favorite Movies")

# Aca a las posiciones que le pasamos al graficos las apareamos con nuestras peliculas
plt.xticks(positions, peliculas)

# mostramos el grafico
plt.show()

Y el gráfico resultante es:

 


Tags