diff --git a/dia_15/cuaderno_matplotlib.py b/dia_15/cuaderno_matplotlib.py new file mode 100644 index 0000000..bf54398 --- /dev/null +++ b/dia_15/cuaderno_matplotlib.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- +"""Python TOTAL - Matplotlib.ipynb + +Automatically generated by Colaboratory. + +Original file is located at + https://colab.research.google.com/drive/1CqTZeTV1_gEcvQEVFOVdUh1Ibcf1HcS0 + +# Práctica de la librería Matplotlib + +En este notebook, se desarrollarán una serie de tareas utilizando la librería Matplotlib, empleada para la visualización de datos mediante gráficos. + +Se proponen y documentan posibles formas de resolver los ejercicios, pero pueden existir varias formas de lograr los mismos resultados. + +Siempre es una buena idea verificar la [Documentación Oficial de Matplotlib](https://matplotlib.org/stable/index.html), donde es posible encontrar todo tipo de información referida a esta librería. Y si te quedas trabado, busca en Google "como hacer [algo] con Matplotlib". Hay enormes probabilidades de que esa pregunta ya haya sido respondida! + +Por ejemplo, si quieres crear un gráfico con `plt.subplots()`, puedes buscar directamente en Google [`plt.subplots()`](https://www.google.com/search?q=plt.subplots()) +""" + +# Commented out IPython magic to ensure Python compatibility. +# Importamos el módulo de Matplotlib como plt +import matplotlib.pyplot as plt + +# La siguiente linea nos permite ver los gráficos directamente al ejecutarlos en el notebook +# %matplotlib inline + +# Creamos un gráfico utilizando plt.plot() +plt.plot() + +# Graficamos una lista de números +a = [1,5,3,8,7,15] +plt.plot(a) + +# Creamos dos listas, x e y. Llenamos a la lista x de valores del 1 al 100. +x = list(range(101)) + +# Los valores de y van a equivaler al cuadrado del respectivo valor en x con el mísmo índice +y = [] +for numero in x: + y.append(numero**2) + +# Graficamos ambas listas creadas +plt.plot(x,y) + +"""Hay otra manera de crear gráficos en Matplotlib, utilizando el método orientado a objetos (OO).""" + +# Creamos el gráfico utilizando plt.subplots() +# fig se refiere a la figurar general +# ax se refiere al eje +fig, ax = plt.subplots() + +ax.plot(x, y) + +"""Veamos cómo sería un flujo de trabajo en Matplotlib""" + +# Commented out IPython magic to ensure Python compatibility. +# Importar y preparar la librería +import matplotlib.pyplot as plt +# %matplotlib inline + +# Preparar los datos +x = list(range(101)) +y = [] +for numero in x: + y.append(numero**2) + +# Preparamos el área del gráfico (fig) y el gráfico en sí (ax) utilizando plt.subplots() +fig, ax = plt.subplots() + +# Añadimos los datos al gráfico +ax.plot(x, y) + +# Personalizamos el gráfico añadiendo título al gráfico y a los ejes x e y +ax.set(title="Gráfico de casos de COVID-10 en Latam", xlabel="Días", ylabel="Casos confirmados") + +# Guardamos nuestro gráfico empleando fig.savefig() +fig.savefig("/ejemplo-grafico-covif.png") + +"""Veamos ahora un gráfico de dispersión:""" + +#creamos un nuveo set de datos utilizando la librería Numpy +import numpy as np + +x_1 = np.linspace(0, 100, 20) +y_1 = x_1**2 + +# Creamos el gráfico de dispersión de x vs y +fig, ax = plt.subplots() +ax.scatter(x_1, y_1) + +ax.set(title="Otro gráfico más", xlabel="Días", ylabel="Aumento exponencial") + +# Visualizamos ahora la función seno, utilizando np.sin(X) +fig, ax = plt.subplots() +x_2 = np.linspace(-10, 10, 100) +y_2 = np.sin(x_2) + +ax.scatter(x_2, y_2) + +"""Veamos ahora otro tipo de gráfico. Por ejemplo, un gráfico de barras, que por lo general asocia resultados numéricos a variables categóricas (categorías)""" + +# Creemos un diccionario con tres platos y su respectivo precio +# Las claves del diccionario serán los nombres de las comidas, y los valores asociados, su precio +comidas = {"lasagna":350, "sopa":150, "roast beef":650} + +# Crearemos un gráfico de barras donde el eje x está formado por las claves del diccionario, +# y el eje y contiene los valores. +fig, ax = plt.subplots() +ax.bar(comidas.keys(), comidas.values()) + + +# Añadimos los títulos correspondientes +ax.set(title="Precios de comidas", xlabel="Comidas", ylabel="Precios") + +# Probemos a continuación con un gráfico de barras horizontales +fig, ax = plt.subplots() +ax.barh(list(comidas.keys()), list(comidas.values())) + +ax.set(title="Precios de comidas", xlabel="Precios", ylabel="Comidas") + +"""Un gráfico semejante es un histograma. Podemos generar números aleatorios que siguen una distribución normal (que se acumulan en torno a un valor central), con la función randn:""" + +# Creamos una distribución de 1000 valores aleatorios distribuidos normalmente +x = np.random.random(1000) + +# Creamos el histograma +fig, ax = plt.subplots() +ax.hist(x) + +"""Veamos ahora un caso más complejo, trabajando con subplots, o figuras que cotienen varios gráficos:""" + +# Creamos una figura con 4 subgráficos (2 por fila) +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(12,8)) + +"""Añadimos datos a cada uno de los gráficos (axes)""" + +# Creamos la misma disposición de gráficos, con un tamaño de figura de 10x5 +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10,5)) + +# Para nuestro primer gráfico, tomamos el conjunto x_1, y_1, y generamos un gráfico de líneas +ax1.plot(x_1, y_1) + + +# Para nuestro segundo gráfico, tomamos el conjunto x_2, y_2, y generamos un gráfico de dispersión +ax2.scatter(x_2,y_2) + +# Creamos un gráfico con los precios de tres comidas en la esquina inferior izquierda +ax3.bar(comidas.keys(), comidas.values()) + +# El gráfico de la esquina inferior derecha será un histograma de valores aleatorios con distribución normal +ax4.hist(np.random.randn(1000)) + +"""Matplotlib tiene un conjunto de varios estilos disponibles, podemos verificarlos de la siguiente manera:""" + +# Verificamos estilos disponibles +plt.style.available + +# Cambiamos el estilo predeterminado por "seaborn-whitegrid" +plt.style.use('seaborn-v0_8-whitegrid') + +"""Habiendo cambiado el estilo (el cambio más evidente que veremos será una grilla en el fondo de cada gráfico), cambiaremos también los colores de las líneas, puntos y barras en cada uno de los gráficos por códigos hex a nuestra preferencia: + +""" + +# Copiamos los valores de los gráficos anteriores +# Creamos la misma disposición de gráficos, con un tamaño de figura de 10x5 +fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10,5)) + +# Para nuestro primer gráfico, tomamos el conjunto x_1, y_1, y generamos un gráfico de líneas +ax1.plot(x_1, y_1, color="#fcba03") + + +# Para nuestro segundo gráfico, tomamos el conjunto x_2, y_2, y generamos un gráfico de dispersión +ax2.scatter(x_2,y_2, color="#fcba02") + +# Creamos un gráfico con los precios de tres comidas en la esquina inferior izquierda +ax3.bar(comidas.keys(), comidas.values(), color="#03c6fc") + +# El gráfico de la esquina inferior derecha será un histograma de valores aleatorios con distribución normal +ax4.hist(np.random.randn(1000), color="#fc036b") \ No newline at end of file