Universidad Nacional de San Agustín de Arequipa Escuela Profesional de Ingeniería de Telecomunicaciones Ingeniero Renzo
Views 121 Downloads 1 File size 1MB
Universidad Nacional de San Agustín de Arequipa Escuela Profesional de Ingeniería de Telecomunicaciones
Ingeniero Renzo Bolivar - Docente DAIE Curso : Computación 2
PRÁCTICA 05 PYTHON - Librería Matplotlib
1.- Objetivos: 1. Presentación y/o Visualización de Datos con Matplotlib. a. Utilizar datos en listas simples en Python para graficar con Matplotlib. b. Utilizar datos en matrices NumPy para graficar con Matplotlib. 1. Seguir con buenas practicas en Python - Funciones y Excepciones. 2. Uso de entornos de desarrollo "Jupyter Python" y "Spyder". 3. Practica Colaborativa con sincronización con GitLab.
Nota: NO OLVIDAR INICIAR EL TRABAJO COLABORATIVO: en directorio: Practica_5 (con carpetas de Apellidos)
Primero: JEFE DE PROYECTO: Inicia la practica Sincronizando repositorio local con proyecto GitLab. (Ver Video: "Trabajo Colaborativo: Inicio Jefe de Proyecto").
Segundo: COLABORADORES: Los colaboradores Clonan el proyecto de GitLab creado por el Jefe de Proyecto a su repositorio local. (Ver Video: "Trabajo Colaborativo: Inicio Colaboradores").
DESARROLLO
2.- Matplotlib Matplotlib es una librería de trazado utilizada para gráficos 2D en lenguaje de programación Python, es muy flexible y tiene muchos valores predeterminados incorporados que te ayudarán en tú trabajo. Para iniciar necesitas: - Realizar las importaciones necesarias - Preparar algunos datos y - Trazar tu función con la ayuda de la interfaz pyplot.
Ingresamos al entorno de desarrollo Jupyter Notebook desde Anaconda Navigator. Abrimos nuevo archivo lo llamamos Practica_05_matplotlib.ipynb (dentro de nuestra carpeta con nuestro Apellido). Digitamos lo siguiente.
Instalación de Matplotlib: (recordamos como instalar librerías) En la línea de comando de entorno Computacion2 digitar lo siguiente: conda install c condaforge matplotlib Luego presionar Y para la instalación
Visualización con Matplotlib: Importamos los paquetes necesarios: In [1]: import numpy as np import matplotlib.pyplot as plt
Interfaz pyplot: Función plot La interfaz pyplot proporciona una serie de funciones que operan sobre un estado global - es decir, nosotros no especificamos sobre qué gráfica o ejes estamos actuando. Es una forma rápida y cómoda de crear gráficas pero perdemos parte del control. El paquete pyplot se suele importar bajo el alias plt , de modo que todas las funciones se acceden a través de plt. . La función más básica es la función plot : In [2]: #Preparamos algunos datos creando listas y = [1, 2, 5, 10] #Graficamos plt.plot(y) #plt.plot﴾y, 'gd'﴿ plt.show() #imprime la grafica
La función plot recibe una sola lista (si queremos especificar los valores y) o dos listas (si especificamos x e y). Naturalmente si especificamos dos listas ambas tienen que tener la misma longitud.
Gráficas de línea In [3]: #Preparamos algunos datos creando listas x = [0.0, 0.1, 0.2, 0.7, 0.9] y = [1, 2, 3, 4, 1] #Graficamos plt.plot(x, y) plt.grid() #grilla plt.show()
In [4]: #Preparamos algunos datos creando listas x = [0, 0.1, 0.2, 0.5,0.6] y = [1, 1, 0, 3, 1] #Graficamos plt.plot(x, y, color='blue', linewidth=2, label='Linea') plt.legend() #leyenda plt.grid() plt.show()
In [5]: #Definir los datos x1 = [3, 4, 5, 6] y1 = [5, 6, 3, 4] x2 = [2, 5, 8] y2 = [3, 4, 3] #Configurar las características del gráfico plt.plot(x1, y1, label = 'Línea 1', linewidth = 4, color = 'blue') plt.plot(x2, y2, label = 'Línea 2', linewidth = 4, color = 'green') #Definir título y nombres de ejes plt.title('Diagrama de Líneas') #titulo principal plt.ylabel('Eje Y') #nombre eje Y plt.xlabel('Eje X') #nombre eje X #Mostrar leyenda, cuadrícula y figura plt.legend() plt.grid() plt.show()
Grafico de Barras Los gráficos de barras se usan para comparar datos entre diferentes categorías, estos se pueden representar horizontal o verticalmente. La pogramación es muy parecida con gráficas de líneas, definimos los datos que vamos a graficar y configuramos las características del gráfico, en ves de utilizar plt.plot() usamos plt.bar() que indica que se va a graficar una gráfica de barras. El resto de instrucciones es exactamente igual. Barras Verticales In [6]: # Definir los datosDefinir los datos fechas = ['15/05/2020', '18/05/2020', '20/05/2020', '22/05/2020', '25/05/2020'] #eje X valores = [42, 83, 68, 90, 80] #eje Y #caracteristicas de gráfico plt.bar(range(5), valores, edgecolor='black') #las barras contorno plt.xticks(range(5), fechas) # Nombre eje X plt.ylim(min(valores)10, max(valores)+10) #limites de Y #Titulo y Nombre de Ejes plt.title('Farmacia Ingresos por Día') #titulo plt.ylabel('Soles') plt.xlabel('Fechas') plt.show()
Barras Horizontales In [7]: # Definir los datos fechas = ['15/05/2020', '18/05/2020', '20/05/2020', '22/05/2020', '25/05/2020'] #eje X valores = [42, 83, 68, 90, 80] #eje Y #Configurar Grafico plt.barh(range(5), valores, edgecolor='black') plt.yticks(range(5), fechas, rotation=60) # Nombre eje Y plt.xlim(min(valores)10, max(valores)+10) #limites de X #Titulo y Nombre de Ejes plt.title('Farmacia Ingresos por Día') #titulo plt.ylabel('Fechas') plt.xlabel('Soles') plt.show()
Gráfica Circular (pastel) Un gráfico circular se divide en segmentos, es decir, sectores de pastel, básicamente se usa para mostrar el porcentaje o los datos proporcionales en los que cada porción del pastel representa una categoría. El procedimiento es muy parecido alos casos anteriores, ahora se utiliza plt.pie() pero se debe especificar otras características para mejorar la presentación de la gráfica. Simple In [8]: # Definir los datos manzanas = [20,10,25,30] nombres = ["Ana", "Juan", "Diana", "Catalina"] #caracteristicas de gráfico plt.pie(manzanas, labels=nombres) #Definir título plt.title('Gráfico Circular') plt.show()
Con porcentajes In [9]: # Definir los datos manzanas = [20,10,25,30] nombres = ["Ana", "Juan", "Diana", "Catalina"] #caracteristicas de gráfico plt.pie(manzanas, labels=nombres, autopct='%0.1f %%') #Definir título plt.title('Gráfico Porcentajes') plt.show()
Cambio de colores In [10]: # Definir los datos manzanas = [20,10,25,30] nombres = ["Ana", "Juan", "Diana", "Catalina"] #lista de colores colores = ['magenta','green','red','cyan'] #caracteristicas de gráfico plt.pie(manzanas, labels=nombres, autopct='%0.1f %%', colors=colores) #Definir título plt.title('Gráfico Colores') plt.show()
Separación del pie In [11]: # Definir los datos manzanas = [20,10,25,30] nombres = ["Ana", "Juan", "Diana", "Catalina"] #lista de colores colores = ['magenta','green','red','cyan'] desface = (0,0,0,0.1) #desface #caracteristicas de gráfico plt.pie(manzanas, labels=nombres, autopct='%0.1f %%', colors=colores, explode=desface) #Definir título plt.title('Gráfico Separado') plt.show()
Gráfica Dispersión Los gráficos de dispersión se utilizaron para comparar variables, por ejemplo, cuánto una variable se ve afectada por otra variable y de esta forma se construye una relación a partir de ella. En esta gráfica los datos se muestran como una colección de puntos, cada uno con el valor de una variable que determina la posición en el eje horizontal y el valor de otra variable determina la posición en el eje vertical. La gráfica se construye utilizando el comando plt.scatter() que significa dispersión en inglés, y el resto de las instrucciones son las mismas que hemos utilizado hasta ahora. Simple In [12]: # Definir los datos x = np.random.randint(1,100, size=20) y = np.random.randint(50,200, size=20) #caracteristicas de gráfico plt.scatter(x,y) plt.title('Gráfico Dispersión') plt.show()
Histogramas Los histogramas se usan para mostrar una distribución, son útiles cuando tienes matrices o una lista muy larga. Veamos como podemos graficar este tipo de gráficos. Para esta gráfica definimos los datos y a su vez un los bins que vendría siendo los compartimientos en donde estarán ubicados en nuestra gráfica los datos. A su vez acá empleamos la instrucción plt.hist() para representar esta gráfica y el resto de instrucciones es la misma que hemos utilizado con anterioridad. simple In [13]: #Definir los datos a = [22,55,62,45,21,22,34,42,42,4,2,102,95,85,55,110,120,70,65,55,111,115,80,75,65,54,44,43,42,48] bins = [0,10,20,30,40,50,60,70,80,90,100] #Configurar las características del gráfico plt.hist(a, bins, histtype = 'bar', rwidth = 0.8, color = 'lightgreen') #Definir título y nombres de ejes plt.title('Histograma') plt.ylabel('Eje Y') plt.xlabel('Eje X') #Mostrar figura plt.show()
EJEMPLOS: Ejemplo 1: Varias gráficas de línea In [14]: #declaramos el tamaño de la figura fig = plt.figure(figsize=(15,15)) fig.tight_layout() #definimos espaciado suficiente entre graficas #lista de colores colores = ['blue','green','red','cyan','magenta','yellow','black','white'] for i in range(1,7): # seis graficas x = np.arange(0,16,2) # rango de numeros desde 0 al 16 , de 2 en 2 y = pow(x,np.random.randint(0,6))+np.random.randint(0,10)*x+np.random.randint(5,10) # ecuación al azar con x elevado a la potencia al azar de 0 a 6, ax = plt.subplot(2,3,i) # acomodo de 2 filas con 3 columnas acomodo con i ax.plot(x,y,color = colores[i]) #graficamos con color cada subgrafica ax.set_xlabel('x') #etiquetas ax.set_ylabel('y') ax.set_title('Gráfica '+str(i))
Ejemplo 2: Gráfica completa circular In [15]: #Definir los datos dormir =[7,8,6,11,7] comer = [2,3,4,3,2] trabajar =[7,8,7,2,2] recreación = [8,5,7,8,13] divisiones = [7,2,2,13] actividades = ['Dormir','Comer','Trabajar','Recreación'] colores = ['red','purple','blue','orange'] desfase = (0.1,0,0,0) #Configurar las características del gráfico plt.pie(divisiones, labels=actividades, colors=colores, startangle=90, shadow=True, explode=desfase, au topct='%1.1f%%') #Definir título plt.title('Gráfico circular') #Mostrar figura plt.show()
Ejemplo 3: Barras Dobles Verticales In [16]: #Definir los datos x1 = [0.25, 1.25, 2.25, 3.25, 4.25] y1 = [10, 55, 80, 32, 40] x2 = [0.75, 1.75, 2.75, 3.75, 4.75] y2 = [42, 26, 10, 29, 66] #Configurar las características del gráfico plt.bar(x1, y1, label = 'Datos 1', width = 0.5, color = 'lightblue', edgecolor='black') plt.bar(x2, y2, label = 'Datos 2', width = 0.5, color = 'orange', edgecolor='black') #Definir título y nombres de ejes plt.title('Gráfico de barras') plt.ylabel('Eje Y') plt.xlabel('Eje X') #Mostrar leyenda y figura plt.legend() plt.show()
Ejemplo 4: Gráfico Dispersión In [17]: #Definir los datos x1 = [0.25, 1.25, 2.25, 3.25, 4.25] y1 = [10, 55, 80, 32, 40] x2 = [0.75, 1.75, 2.75, 3.75, 4.75] y2 = [42, 26, 10, 29, 66] #Configurar las características del gráfico plt.scatter(x1, y1, label = 'Datos 1',color = 'red') plt.scatter(x2, y2,label = 'Datos 2', color = 'purple') #Definir título y nombres de ejes plt.title('Gráfico de dispersión') plt.ylabel('Eje Y') plt.xlabel('Eje X') #Mostrar leyenda y figura plt.legend() plt.show()
Ingresamos al entorno de desarrollo Spyder desde Anaconda Navigator. Abrimos nuevo archivo con el nombre: Practica_05_matplotlib.py (dentro de nuestra carpeta con nuestro Apellido). Digitamos todas las lineas anteriores y luego ejecutamos para verificar que esta correcto, al final guardamos.
Ejercicios Matemáticos: Ingresamos al entorno de desarrollo Spyder desde Anaconda Navigator y/o Terminal entorno computacion2. Creamos 03 nuevos archivos con nombres: (dentro de nuestra carpeta con nuestro Apellido). `Ejercicio_01_matplotlib.py` `Ejercicio_02_matplotlib.py` `Ejercicio_03_matplotlib.py` `Ejercicio_04_matplotlib.py` `Ejercicio_05_matplotlib.py` Digitamos solución de cada Ejercicio y luego ejecutamos para verificar que esta correcto, al final guardamos.
Ejercicio 1 La tarea más habitual a la hora de trabajar con matplotlib es representar una función. Lo que tendremos que hacer es definir un dominio y evaluarla en dicho dominio. Por ejemplo:
(
) =
−
2
In [18]: def f(x): return np.exp(x ** 2) Definimos el dominio con la función np.linspace , que crea un vector de puntos equiespaciados: In [19]: x = np.linspace(1, 3, 100) Y representamos la función:
In [20]: plt.plot(x, f(x), label="Función f(x)") plt.xlabel("Eje $x$") plt.ylabel("$f(x)$") plt.legend() plt.title("Función $f(x)$") plt.show()
Notamos varias cosas: Con diversas llamadas a funciones dentro de plt. se actualiza el gráfico actual. Esa es la forma de trabajar con la interfaz pyplot. Podemos añadir etiquetas, y escribir en ellas. Tan solo hay que encerrarlo entre signos de dólar $$. Añadiendo como argumento label podemos definir una leyenda.
Ejercicio 2: La función plot acepta una serie de argumentos para personalizar el aspecto de la función. Con una letra podemos especificar el color, y con un símbolo el tipo de línea. In [21]: plt.plot(x, f(x), 'ro') plt.plot(x, 1 f(x), 'g') plt.show()
Esto en realidad son códigos abreviados, que se corresponden con argumentos de la función plot : In [22]: plt.plot(x, f(x), color='red', linestyle='', marker='o') plt.plot(x, 1 f(x), c='g', ls='') plt.show()
La lista de posibles argumentos y abreviaturas está disponible en la documentación de la función plot http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot.
Ejercicio 3: La función scatter muestra una nube de puntos, con posibilidad de variar también el tamaño y el color. In [23]: N = 100 x = np.random.randn(N) y = np.random.randn(N) plt.scatter(x, y) plt.show()
Con s y c podemos modificar el tamaño y el color respectivamente. Para el color, a cada valor numérico se le asigna un color a través de un mapa de colores; ese mapa se puede cambiar con el argumento cmap . Esa correspondencia se puede visualizar llamando a la función colorbar . In [24]: s = np.abs(50 + 50 * np.random.randn(N)) c = np.random.randn(N) plt.scatter(x, y, s=s, c=c, cmap=plt.cm.Blues) plt.colorbar() plt.show()
In [25]: plt.scatter(x, y, s=s, c=c, cmap=plt.cm.Oranges) plt.colorbar() plt.show()
Ejercicio 4: Podemos crear figuras con varios sistemas de ejes, pasando a subplot el número de filas y de columnas. In [26]: x = np.linspace(1, 7, 1000) fig = plt.figure() plt.subplot(211) plt.plot(x, np.sin(x)) plt.grid(False) plt.title("Función seno") plt.subplot(212) plt.plot(x, np.cos(x)) plt.grid(False) plt.title("Función coseno") plt.show()
¿Cómo se ajusta el espacio entre gráficas para que no se solapen los textos? Buscamos en Google "plt.subplot adjust" en el primer resultado tenemos la respuesta http://stackoverflow.com/a/9827848
Como hemos guardado la figura en una variable, puedo recuperarla más adelate y seguir editándola. In [27]: fig.tight_layout() fig Out[27]:
Si queremos manipular la figura una vez hemos abandonado la celda donde la hemos definido, tendríamos que utilizar la interfaz orientada a objetos de matplotlib. Es un poco lioso porque algunas funciones cambian de nombre, así que en este curso no la vamos a ver. Si te interesa puedes ver los notebooks de la primera edición, donde sí la introdujimos. https://github.com/AeroPython/Curso_AeroPython/releases/tag/v1.0
Ejercicio 5: Crear una función que represente gráficamente esta expresión: sin(2
Siendo
1
y
2
1
argumentos de entrada (por defecto 10 y 100) y
) + sin(2
2
)
. Además, debe mostrar:
∈ [0, 0.5]
leyenda, título "Dos frecuencias", eje x "Tiempo ( )" y usar algún estilo de los disponibles. In [28]: def frecuencias(f1=10.0, f2=100.0): max_time = 0.5 times = np.linspace(0, max_time, 1000) signal = np.sin(2 * np.pi * f1 * times) + np.sin(2 * np.pi * f2 * times) with plt.style.context("ggplot"): plt.plot(signal, label="Señal") plt.xlabel("Tiempo ($t$)") plt.title("Dos frecuencias") plt.legend() frecuencias()
3.- Sincronizar cuanta veces sea necesario los cambios con git:
Ingresamos a la linea de comando. En nuestro directorio de Practica_05 . Añadimos los cambios de archivos a git:
(Programacion2) renzo@misti:~$ git add A (Programacion2) renzo@misti:~$ git commit m "Finalizando Practica 02"
Actualizamos nuestros repositorio local con los cambios del respositorio de GitLab:
(Programacion2) renzo@misti:~$ git pull origin master
Enviamos nuestros cambios al repositorio remoto de GitLab:
(Programacion2) renzo@misti:~$ git push origin master
Si se hace cambios repetir los pasos anteriores de comandos git.
Para tener evidencia del trabajo realizado envía un solo integrante al Aula Virtual, la carpeta con todo el proyecto en zip.
Finaliza la Práctica
Bibliografía
[1] Guía de matplotlib para principiantes http://matplotlib.org/users/beginner.html [2] Tutorial de matplotlib en español http://pybonacci.org/tag/tutorial-matplotlib-pyplot/ [3] Referencia rápida de matplotlib https://scipy-lectures.org/intro/matplotlib/index.html