import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,5,11) # Ejecuta una serie de números de manera aleatoria
y = x**2
print(x)
print(y)
plt.plot(x,y)
plt.show() # para que se muestre la gráfica
plt.plot(x,y,'rx') # rx significa que quiero la línea de color rojo y con marcadores x
plt.show()
plt.plot(x,y,'bo') # bo significa que quiero la línea de color azul y con marcadores con forma de círculo
plt.show()
plt.plot(x,y,'rs-') # - indica que quiero una continuidad entre cada marcador
plt.show()
plt.plot(x,y,'yD:')
plt.show()
plt.hist(x)
plt.show()
plt.pie(x)
plt.show()
plt.scatter(x,y)
plt.show()
plt.boxplot(x)
plt.show()
# Supongamos que quiero dos gráficos, uno que me muestre la relación entre x e y, y la otra que sea un histograma
plt.subplot(1,2,1) # el primer parámetro es la cantidad de filas, el segundo es la cantidad de columnas, y el tercero es el index que voy a manejar entre las filas y columnas definidas previamente)
plt.plot(x,y,'r--')
plt.subplot(1,2,2)
plt.hist(y)
plt.show()
plt.subplot(1,2,1)
plt.plot(x,y,'r--')
# Agrego una nueva linea de color azul en el primer gráfico
plt.plot(y,x,'b:')
plt.subplot(1,2,2)
# Cambio el histograma por un gráfico de torta
plt.pie(y)
plt.show()
#Realizo unos cambios para trabajar con dos filas y una columna
plt.subplot(2,1,1)
plt.plot(x,y,'r--')
plt.plot(y,x,'b:')
plt.subplot(2,1,2)
plt.pie(y)
plt.show()
fig = plt.figure()
axes = fig.add_axes([0.1,0.1,0.5,0.9]) # Los dos primeros parámetros hacen establecen la posición de la figura en el lienzo.
# Los últimos dos parámetros hacen referencia al tamaño de la figura
axes.plot(x, y, 'b')
fig.show()
fig = plt.figure()
axes = fig.add_axes([0.1,0.1,0.8,0.9])
axes2 = fig.add_axes([0.2,0.55,0.4,0.3]) # Le indico que quiero un segundo gráfico.
axes.plot(x, y, 'b')
axes2.plot(y,x,'r')
axes2.set_facecolor('#e6e6fa')
fig.show()
# Defino un array utilizando numpy
x = np.linspace(0,5,11)
# Aplico una función seno a x
y = np.sin(x)
# Voy a crear un lienzo con un gráfico adentro
fig, axes = plt.subplots()
axes.plot(x,y,'b')
# Realizaremos algunos pequeños cambios al gráfico
fig, axes = plt.subplots(nrows = 1, ncols = 2)
# axes.plot(x,y,'b')
fig, axes = plt.subplots(nrows = 1, ncols = 2)
# Ahora realizo cambios en cada uno de los gráficos
# De esta manera puedo definir objetos independientes y acceder a ellos mediante un índice
axes[0].plot(x,y,'b')
axes[1].plot(y,x,'r')
# Otra manera de hacerlo
fig, (ax1, ax2) = plt.subplots(nrows = 1, ncols = 2)
ax1.plot(x,y,'b')
ax2.plot(y,x,'r')
# Seguimos explorando el nivel de detalle
fig, axes = plt.subplots(nrows = 2, ncols = 4)
#ax1.plot(x,y,'b')
#ax2.plot(y,x,'r')
fig, axes = plt.subplots(nrows = 2, ncols = 4)
axes[0,0].plot(x,np.cos(x)) # De esta manera indicamos que queremos el plot para el primer axe
# del mismo modo podemos agregar plot en el resto de los axes
axes[0,1].plot(x,np.sin(x),'y')
axes[0,2].plot(x,np.tan(x),'r')
axes[0,3].plot(x,np.cos(x)**2)
# Otra manera de hacerlo
fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(nrows = 2, ncols = 4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'y')
ax3.plot(x,np.tan(x),'r')
ax4.plot(x,np.cos(x)**2)
# Aplico tight_layout para que la visualización se vea mejor
fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(nrows = 2, ncols = 4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'y')
ax3.plot(x,np.tan(x),'r')
ax4.plot(x,np.cos(x)**2)
fig.tight_layout()
# Ahora voy a graficar los plots en los axes de abajo
fig, ((ax1,ax2,ax3,ax4),(ax5,ax6,ax7,ax8)) = plt.subplots(nrows = 2, ncols = 4)
ax1.plot(x,np.cos(x))
ax2.plot(x,np.sin(x),'y')
ax3.plot(x,np.tan(x),'r')
ax4.plot(x,np.cos(x)**2)
ax5.plot(x,np.cos(x),'bs')
ax6.plot(x,np.tan(x-1/x),'g--')
ax7.plot(x,np.tan(x),'r:')
ax8.plot(x,np.sin(y*x)**2,'purple')
fig.tight_layout()
x = np.linspace(0,5,11)
y = np.sin(x)
fig, axes = plt.subplots(1,2)
axes[0].plot(x,y,label = '$sin(x)$') # Agrego un label
# Agrego un título
axes[0].set_title('Relación X - Y')
# Agrego labels en los ejes X e Y
axes[0].set_xlabel('X')
axes[0].set_ylabel('Y')
axes[0].legend() # para agregar el label
axes[1].plot(y,x)
# Agrego un título
axes[1].set_title('Relación Y - X')
# Agrego labels en los ejes X e Y
axes[1].set_xlabel('Y')
axes[1].set_ylabel('X')
fig.tight_layout() # Siempre al aplicar tight_layout() el grafico se vera mucho mejor
plt.plot(x,y,label='$sin(x)$')
plt.title('Este es un título')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='upper right')
from matplotlib import style
print(plt.style.available)
plt.style.use('ggplot') # Con esta simple linea de codigo puedo cambiar el estilo de mis gráficas al que yo prefiera.
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(x,x+1,'r')
ax.plot(x,x+2,'b')
ax.plot(x,x+3,'y')
ax.plot(x,x+4,'g')
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(x,x+1,'r--')
ax.plot(x,x+2,'b-')
ax.plot(x,x+3,'y.-')
ax.plot(x,x+4,'go:')
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(x,x+1, color = 'green', alpha = 0.8, linewidth = 5, linestyle = '-',marker='o', markersize = 10, markerfacecolor = '#CCFFCC')
ax.plot(x,x+2, color = 'blue', linewidth = 8, linestyle = '--',marker='x')
ax.plot(x,x+3, color = '#66FF66', linewidth = 3, linestyle = 'dashed',marker='v')
ax.plot(x,x+4, color = '#CCFFCC', linewidth = 2, linestyle = ':',marker='p')
country = ['INDIA', 'JAPAN', 'MEXICO', 'COLOMBIA', 'GERMANY']
population = [1000,800,900,1000,300]
plt.bar(country,population, width = 0.5, color = ['purple', 'red', 'green', 'blue', 'yellow'], edgecolor = 'grey')
# Para cambiar el idioma de las categorías del eje x y agrego que los nombres roten en 45grados.
plt.xticks(np.arange(5),('India', 'Japón', 'Mexico', 'Colombia', 'Alemania'), rotation = 45)
plt.xlabel("Países")
plt.ylabel("Población")
plt.title("Cantidad de habitantes por país")
plt.show()
plt.barh(country,population, color = ['purple', 'red', 'green', 'blue', 'yellow'], edgecolor = 'grey')
plt.show()
# Para practicar me creo un dataset random con la función random de numpy.
data = np.random.randint(1,50,100)
data
plt.hist(data)
plt.show()
plt.hist(data, bins = 50) # Modifico los bins
plt.show()
plt.hist(data, bins = 50, width = 10) # si deseo cambiar el ancho de las barras de frecuencia
plt.show()
plt.hist(data, bins = 10, histtype = 'step')
plt.show()
plt.style.use('classic') # Voy a cambiar el estilo para usar uno clásico
plt.boxplot(data)
plt.show
plt.boxplot(data, vert = False) # con esta propiedad lo hago horizontal
plt.show
plt.boxplot(data, vert = False, patch_artist=True) # Con patch_artist debería pintar el IQR, pero por alguna razón que hoy desconozco, no lo hace! Si alguien sabe, avise
plt.show
plt.boxplot(data, vert = False, patch_artist=True, notch = True)
plt.show
plt.style.use('Solarize_Light2')
data1 = np.append(data,200) # Agrego un outlier al dataset
plt.boxplot(data1, vert = False, patch_artist=True, notch = True, showfliers=True)
plt.show
plt.boxplot(data1, vert = False, patch_artist=True, notch = True, showfliers=False) # para que no muestre el outlier
plt.show
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = (30 * np.random.rand(N)) **2
colors = np.random.rand(N)
plt.scatter(x,y)
plt.show()
plt.scatter(x,y, s = area) # el tamaño de cada punto refiere a la variable area
plt.show()
plt.scatter(x,y, s = area, c = colors) # agrego la variable colors al scatter
plt.show()
plt.scatter(x,y, s = area, c= colors, marker = 'o', alpha = 0.5) # agrego un alpha y defino el marker
plt.show()
# Quiz:
fig, axes = plt.subplots(nrows=1,ncols=2,figsize=(5,5))
axes[1].set_title('Título')
import seaborn as sns
sns.barplot(x = ['A','B','C'], y = [1, 3, 2,])
plt.show()
sns.set(style='darkgrid') # cambiamos el estilo del grid
sns.barplot(x = ['A','B','C'], y = [1, 3, 2,])
plt.show()
sns.set(style='darkgrid', palette = 'dark') # cambiamos paleta de colores
sns.barplot(x = ['A','B','C'], y = [1, 2, 3,])
plt.show()
sns.set(style='darkgrid', palette = 'dark', font = "Verdana", font_scale = 1)
sns.barplot(x = ['A','B','C'], y = [1, 2, 3,])
plt.show()
tips = sns.load_dataset('tips') # descargaremos el dataset con propinas en un restaurante.
tips
sns.displot(data = tips, x = 'total_bill')
plt.show()
sns.displot(data = tips, x = 'total_bill', y = 'tip')
plt.show()
# Agregando el parámetro hue puedo incluir una tercer variable, categorica, al análisis.
sns.displot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex')
plt.show()
# hue funciona con un histograma de la misma manera
sns.displot(data = tips, x = 'total_bill', hue = 'sex')
plt.show()
# con la función kind podes cambiar el tipo de gráfico
sns.displot(data = tips, x = 'total_bill', hue = 'sex', kind = 'kde')
plt.show()
# Puedo quitar la leyenda con el parámetro legend
sns.displot(data = tips, x = 'total_bill', hue = 'sex', kind = 'kde', legend = False)
plt.show()
# También puedo cambiar colores con palette
sns.displot(data = tips, x = 'total_bill', hue = 'sex', kind = 'kde', legend = True, palette = 'dark', alpha = .25)
plt.show()
# Revisamos los primeros datos del dataset tips
tips.head()
sns.histplot(data=tips, x='tip', bins=15)
plt.show
# Si quiero ver el comportamiento acumulativo de mis frecuencias en el histograma
sns.histplot(data=tips, x='tip', bins=15, cumulative = True)
plt.show
sns.histplot(data=tips, x='tip', bins=15, cumulative = False, hue = 'sex', stat = 'percent')
plt.show
sns.histplot(data=tips, x='tip', bins=15, cumulative = False, hue = 'sex', stat = 'density')
plt.show
sns.histplot(data=tips, x='tip', bins=15, cumulative = False, hue = 'sex', stat = 'count', multiple = 'stack')
plt.show
sns.histplot(data=tips, x='tip', bins=15, cumulative = False, hue = 'sex', stat = 'count', multiple = 'dodge')
plt.show
sns.histplot(data=tips, x='tip', bins=15, cumulative = False, hue = 'sex', stat = 'count', multiple = 'fill')
plt.show
sns.kdeplot(data = tips,x='tip', hue = 'sex')
plt.show()
sns.kdeplot(data = tips,x='tip', hue = 'sex', cumulative = False, shade = True, bw_adjust=1)
plt.show()
sns.ecdfplot(data = tips, x = 'tip', hue = 'sex', stat='count')
plt.show()
sns.displot(data = tips, x = 'tip', hue = 'sex')
plt.show()
# Displot selecciona automáticamente un tipo de gráfico. No obstante, puedo especificar un grafico del tipo kde
sns.displot(data = tips, x = 'tip', hue = 'sex', kind = 'kde')
plt.show()
sns.displot(data = tips, x = 'tip', hue = 'sex', kind = 'hist', multiple = 'stack')
plt.show()
sns.scatterplot(data=tips,x='tip',y='total_bill',hue='smoker')
plt.show()
tips.head()
sns.countplot(data = tips, x = 'day', hue = 'sex')
plt.show()
plt.figure(figsize = (10,10)) # con esta línea de código configuro el tamaño de la figura.
sns.stripplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
# Con el parámetro dodge puedo ver dividida la variable categorica sex en cada uno de los días.
# para revisar la concentración de los datos es mejor usar swarmplot
plt.figure(figsize = (10,10))
sns.swarmplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
sns.swarmplot(data = tips, x = 'smoker', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
plt.figure(figsize = (10,10))
sns.boxplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
sns.boxplot(data = tips, y = 'total_bill')
plt.show()
plt.style.use('classic')
plt.figure(figsize = (10,10))
sns.boxplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', dodge = True)
sns.swarmplot(data = tips, x = 'smoker', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
plt.style.use('classic')
sns.set_palette("pastel")
plt.figure(figsize = (10,10))
sns.violinplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', dodge = True)
plt.show()
plt.style.use('classic')
plt.figure(figsize = (10,10))
sns.violinplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', split = True, palette='muted')
plt.show()
sns.catplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', palette = 'bright', kind = 'swarm')
plt.show()
sns.catplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', palette = 'bright', kind = 'swarm', col='time')
plt.show()
sns.catplot(data = tips, x = 'day', y = 'total_bill', hue = 'sex', palette = 'bright', kind = 'box', col='time')
plt.show()
sns.catplot(data=tips, x="day", hue="size", col="time", kind= "count", palette = 'pastel' )
plt.show()
plt.figure(figsize=(10,10))
markers = {"Lunch":"D", "Dinner":"s"}
sns.scatterplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style ='time', palette = 'bright', size = 'size', markers = markers)
# Vamos a mover la leyenda para que no estorbe al gráfico
plt.legend(loc = 'center', bbox_to_anchor = (1.12, 0.6))
plt.show()
sns.lineplot(data = tips, x = 'total_bill', y = 'tip')
plt.show
sns.lineplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style ='time', palette = 'bright', size = 'size', markers = markers)
plt.legend(loc = 'center', bbox_to_anchor = (1.12, 0.6))
plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style ='time', palette = 'bright', size = 'size', markers = markers, kind = 'lineplot')
plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style ='time', palette = 'bright', size = 'size', markers = markers)
plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style = 'time', palette = 'bright', size = 'size', markers = markers, kind = 'line')
plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', style ='time', palette = 'bright', size = 'size', markers = markers, col = 'time')
plt.show()
sns.pairplot(data=tips,hue='day')
plt.show()
sns.pairplot(data = tips, hue = 'sex', palette = 'bright')
plt.show()
sns.jointplot(data = tips, x = 'total_bill', y = 'tip')
plt.show()
sns.jointplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex')
plt.show()
plt.style.use('ggplot')
sns.jointplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', kind = 'hist')
plt.show()
sns.jointplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', kind = 'kde')
plt.show()
# Agrego el comando marginal_ticks y marginal_kws
sns.jointplot(data = tips, x = 'total_bill', y = 'tip', hue = 'sex', kind = 'hist', marginal_ticks=True, marginal_kws = dict(bins=25,fill=False, multiple='dodge'))
plt.show()
sns.pairplot(data = tips)
plt.show()
# puedo agregar el comando hue
sns.pairplot(data = tips, hue = 'sex')
plt.show()
# puedo agregar el comando palette
sns.pairplot(data = tips, hue = 'sex', palette = 'bright')
plt.show()
# puedo agregar el comando corner para no tener información duplicada
sns.pairplot(data = tips, hue = 'sex', palette = 'bright', corner = True)
plt.show()
tips.corr()
# Grafico de heatmap usando seaborn
sns.heatmap(tips.corr())
plt.show()
# Utilizando el comando annot puedo ver el valor de correlación entre variables dentro de cada cuadro
sns.heatmap(tips.corr(), annot = True)
plt.show()
# También puedo cambiarle el mapa de colores con el comando coolwarm
sns.heatmap(tips.corr(), annot = True, cmap = 'coolwarm')
plt.show()
# Con otro color
sns.heatmap(tips.corr(), annot = True, cmap = 'YlGnBu')
plt.show()
# Con otro color
sns.heatmap(tips.corr(), annot = True, cmap = 'Blues')
plt.show()
# Con otro color
sns.heatmap(tips.corr(), annot = True, cmap = 'BuPu')
plt.show()
# Con otro color
sns.heatmap(tips.corr(), annot = True, cmap = 'Greens')
plt.show()
# Luego para separar los cuadros y que el gráfico se vea más legible utilizaremos linewidths = 5
sns.heatmap(tips.corr(), annot = True, cmap = 'Greens', linewidths = 5)
plt.show()