# -*- 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")