Matplotlin es un libreria para crear imagenes 2D de manera facil.
Checate mas en :
Para usar matplotlib, solo tiene que importar el modulo ..tambien te conviene importar numpy pues es muy util
In [21]:
import numpy as np # modulo de computo numerico
import matplotlib.pyplot as plt # modulo de graficas
import pandas as pd # modulo de datos
# esta linea hace que las graficas salgan en el notebook
%matplotlib inline
In [24]:
x = np.array([0,1,2,3,4])
y = x**2 #cuadramos x
plt.plot(x,y)
plt.title("Grafica sencilla")
plt.show()
Podemos usar la funcion np.linspace para crear valores en un rango, por ejemplo si queremos 100 numeros entre 0 y 10 usamos:
In [20]:
x = np.linspace(0,10,100)
y = x**2 #cuadramos x
plt.plot(x,y)
plt.title("Grafica sencilla")
plt.show()
Y podemos graficar dos cosas al mismo tiempo:
In [ ]:
x = np.linspace(0,10,100)
y1 = x # una linea
y2 = x**2 # cuadramos x
plt.plot(x,y1)
plt.plot(x,y2)
plt.title("Dos graficas sencillas")
plt.show()
Que tal si queremos distinguir cada linea? Pues usamos legend(), de leyenda..tambien tenemos que agregarles nombres a cada plot
In [ ]:
x = np.linspace(0,10,100)
y1 = x # una linea
y2 = x**2 # cuadramos x
plt.plot(x,y1,label="Linea")
plt.plot(x,y2,label="Cuadrado")
plt.legend()
plt.title("Dos graficas sencillas")
plt.show()
Tambien podemos hacer mas cosas, como dibujar solamente los puntos, o las lineas con los puntos usando linestyle:
In [25]:
x = np.linspace(0,10,100)
y1 = x # una linea
y2 = x**2 # cuadramos x
y3 = np.sqrt(x) # sacamos raiz cuadrada a x
y4 = np.power(x,1.5) # elevamos x a la potencia 1.5
plt.plot(x,y1,label="Linea",linestyle='-') # linea
plt.plot(x,y2,label="Cuadrado",linestyle=':') # puntitos
plt.plot(x,y3,label="Raiz",linestyle='-.') # linea y punto
plt.plot(x,y4,label="potencia 1.5",linestyle='--') # lineas salteadas
plt.legend()
plt.title("Dos graficas sencillas")
plt.show()
In [ ]:
N = 50 # numero de puntos
x = np.random.rand(N) # numeros aleatorios entre 0 y 1
y = np.random.rand(N)
plt.scatter(x, y)
plt.title("Scatter de puntos aleatorios")
plt.show()
Pero ademas podemos meter mas informacion, por ejemplo dar colores cada punto, o darle tamanos diferentes:
In [ ]:
N = 50 # numero de puntos
x = np.random.rand(N) # numeros aleatorios entre 0 y 1
y = np.random.rand(N)
colores = np.random.rand(N) # colores aleatorios
radios= 15 * np.random.rand(N) # numeros aleatorios entre 0 y 15
areas = np.pi * radios**2 # la formula de area de un circulo
plt.scatter(x, y, s=areas, c=colores, alpha=0.5)
plt.title("Scatter plot de puntos aleatorios")
plt.show()
In [ ]:
N=500
x = np.random.rand(N) # numeros aleatorios entre 0 y 1
plt.hist(x)
plt.title("Histograma aleatorio")
plt.show()
otro tipo de datos, tomados de una campana de gauss, es decir una distribucion normal:
In [ ]:
N=500
x = np.random.randn(N)
plt.hist(x)
plt.title("Histograma aleatorio Normal")
plt.show()
In [ ]:
N=1000
x1 = np.random.randn(N)
x2 = 2+2*np.random.randn(N)
plt.hist(x1,20,alpha=0.3)
plt.hist(x2,20,alpha=0.3)
plt.title("Histograma de dos distribuciones")
plt.show()
Aveces los datos que queremos se encuentran en el internet. Asumiendo que se encuentran ordenados y en un formato amigable siempre los podemos bajar y guardar como un DataFrame.
Gapminder es una pagina con mas de 500 conjunto de daatos relacionado a indicadores globales como ingresos, producto interno bruto (PIB=GDP) y esperanza de vida.
Aqui bajamos la base de datos de esperanza de vida, lo guardamos en memoria y lo lodeamos como un excel:
Ojo! Aqui usamos .head() para imprimir los primeros 5 renglones del dataframe pues son gigantescos los datos.
In [9]:
xurl="http://spreadsheets.google.com/pub?key=phAwcNAVuyj2tPLxKvvnNPA&output=xls"
df=pd.read_excel(xurl)
print("Tamano completo es %s"%str(df.shape))
df.head()
Out[9]:
Head nos permite darle un vistazo a los datos... asi a puro ojo vemos que las columnas son anios y los renglones los paises...ponder reversar esto con transpose, pero tambien vemos que esta con indices enumerados, prefeririamos que los indices fueran los paises, entonces los cambiamos y tiramos la columna que ya no sirve...al final un head para ver que todo esta bien... a este juego de limpiar y arreglar datos se llama "Data Wrangling"
In [10]:
df = df.rename(columns={'Life expectancy with projections. Yellow is IHME': 'Life expectancy'})
df.index=df['Life expectancy']
df=df.drop('Life expectancy',axis=1)
df=df.transpose()
df.head()
Out[10]:
Entonces ahora podemos ver la calidad de vida en Mexico atravez del tiempo:
In [ ]:
plt.xkcd()
df = pd.read_csv("files/training.csv")
plt.plot(df['DER_mass_MMC'][:1000],
df['DER_mass_transverse_met_lep'][:1000])
plt.show()
de esta visualizacion vemos que la caldiad ha ido subiendo apartir de 1900, ademas vemos mucho movimiento entre 1890 y 1950, justo cuando habia muchas guerras en Mexico.
Tambien podemos seleccionar un rango selecto de años, vemos que este rango es interesante entonces
In [ ]:
subdf=df[ df.index >= 1890 ]
subdf=subdf[ subdf.index <= 1955 ]
subdf['Mexico'].plot()
plt.title("Esperanza de Vida en Mexico entre 1890 y 1955")
plt.show()
o sin tanto rollo, podemos restringuir el rango de nuestra grafica con xlim (los limites del eje X)
In [ ]:
df['Mexico'].plot()
plt.xlim(1890,1955)
plt.title("Esperanza de Vida en Mexico entre 1890 y 1955")
plt.show()
Tambien es importante ver como esto se compara con otros paises, podemos comparar con todo Norteamerica:
In [ ]:
df[['Mexico','United States','Canada']].plot()
plt.title("Esperanza de Vida en Norte-America")
plt.show()
In [ ]: