Practica - 05 - MatPlotLib

Universidad Nacional de San Agustín de Arequipa Escuela Profesional de Ingeniería de Telecomunicaciones Ingeniero Renzo

Views 121 Downloads 1 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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 conda­forge 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,   'g­­d'﴿  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