Gráficos con Python: Matplotlib
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: