Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
WILBER CALDERON
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
Guia de laboratorio #
4
Introducción a los
módulos y gráficas en
Python
Objetivo general
Objetivos especificos
Graficar en Python.
Introducción
En Python es usual trabajar con módulos, el equivalente de estos en otros lenguajes de programación
son las conocidas librerías, sin embargo, todos los elementos que conforman una librería quedan en
espacios d nombre global. Esto hace que al incluir varias el código crece y se corre el riesgo de
contaminar los espacios de nombre o colisionarlos, lo cual ocurre cuando un nombre se repite. El uso de
módulos de Python organiza de mejor manera los Códigos y evita los problemas anteriormente
mencionados.
import <nombre del modulo> y from <nombre del modulo> import <lista de nombres>
Veremos ahora las diferencias de cada una usando el módulo math, el cual es un módulo que Python
trae por defecto.
import math math.sin(math.pi)
Out[16]: 1.2246467991473532e-
16
math.ceil(math.e)
Out[17]: 3.0
math.sin(math.radians(90))
Out[18]: 1.0
In [21]: m(9)
Out[21]: 0.4121184852417566
In [26]: M = math In
[27]: M.sin(9)
Out[27]: 0.4121184852417566
La manera más recomendada de importar funciones determinadas ocupa la palabra clave from. Un
ejemplo es el siguiente:
In [1]: from math import sin, pi
In [2]: sin(9)
Out[2]: 0.4121184852417566
In [3]: sin(2*pi)
Out[3]: -2.4492935982947064e-16'
GUIA DE LABORATORIO 4: INTRODUCCIÓN A LOS MODULOS Y LAS GRAFICAS EN PYTHON.
UNIVERSIDAD DE EL SAVADOR ANALISIS NUMERICO - ANN115 M.SC. E ING. WILBER CALDERON
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
In [7]: from math import*
In [8]: sin(9)
Out[8]: 0.4121184852417566
In [9]: sin(2*pi)
Out[9]: -2.4492935982947064e-
16
In [10]: cos(9)
Out[10]: -0.9111302618846769
El problema de la forma anterior es si se importa más de un módulo que definan funciones o constantes
con el mismo nombre. Tomemos el caso de los módulos math y cmath, ambos con funciones con el
nombre sin():
In [17]: from cmath import* # Modulo para nuemros compl
ejos
In [18]: from math import* # Modulo para numeros reales
In [19]: c = 1+1j # Numero complejo
In [20]: degrees(phase(c)) # Angulo de c en grados
Out[20]: 45.0
In [21]: sin(abs(c)) # Seno de la magnitud de c (numero
real)
Out[21]: 0.9877659459927356
In [22]: sin(c) # Seno de un numero complejo
En este sentido, con solo invertir el orden con los que se importan los módulos, el código debería
funcionar. Por supuesto, esta no es la manera más adecuada de dar solución al problema. La solución
será el uso de la palabra clave as.
In [26]: import math as M # Modulo para numeros reales
In [27]: import cmath as CM # Modulo para numeros complejos
In [28]: c = 1+1j # Numero complejo
In [29]: M.degrees(CM.phase(c)) # Angulo de c en grados
Out[29]: 45.0
In [30]: M.sin(abs(c)) # Seno de la magnitud de c (numero real)
Out[30]: 0.9877659459927356
In [31]: CM.sin(c) # Seno de un numero complejo
Out[31]: (1.2984575814159773+0.6349639147847361j
Por
último, se
presenta un ejemplo de uso de la función dir(), la cual cuando se llama sin argumentos regresa una lista
con los nombres actuales y cuando se llama con una argumento, regresa los atributos del objeto al que
pertenece el argumento.
In [41]: import cmath as CM
In [42]: dir(CM)
Out[42]: ['__doc__', '__name__', '__package__', 'acos', 'acosh',
'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e',
'exp', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi',
'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
Los módulos Numpy y Matplotlib se especializan en métodos útiles para ingenieros y científicos,
implementados muchos métodos que facilitan el análisis numérico. En particular, Numpy se especializa
en el manejo arreglos de N dimensiones mientras que Matplotlib contiene métodos eficientes para la
presentación gráfica de resultados.
Con NumPy lo que obtenemos es la facilidad de aplicar funciones a un arreglo de números, cosa que no
podíamos hacer en Python puro.
In [48]: X = range(-pi, pi, 0.001)
No correrá, primero porque el nombre pi no está definido y segundo porque la función range() solo
admite enteros.
In [51]: from math import sin
In [52]: x = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
In [53]: y = sin(x)
Nos
dará
error porque la función sin() no está hecha para ser evaluada en elementos de un vector.
In [56]: import numpy as np # Se importa el modulo NumPy
In [57]: x = np.arange(-np.pi, np.pi, 0.001) # Se crea un vector de datos
In [58]: y = np.sin(x) # Se evalua el seno elemento a elemento
Las ultimas líneas corren sin ningún problema y se parecen a los códigos hechos en octave pues las
variables x y y tienen ahora los datos suficientes para gratificarlos: uno en el eje horizontal y el otro en el
vertical. Lamentablemente, NumPy no tiene los métodos para hacer esto. Es aquí donde nos auxiliamos
del módulo Matplotlib:
In [62]: import matplotlib.pyplot as plt
In [63]: x = np.arange(-np.pi, np.pi, 0.001)
In [64]: y = np.sin(x)
In [65]: plt.plot(x, y)
Out[65]: [<matplotlib.lines.Line2D at 0x756f410>]
In [66]: plt.show()
El módulo matplotlib.pyplot es una colección de métodos que funcionan de manera semejante a los de
MATLAB (en nuestro caso, parecidos a los de Octave).
Se presentan a continuación los ejemplos de la guía 1 hechos en Python. Se supondrá que los módulos
NumPy y matplotlib.pyplot ya han sido importados.
x = np.arange(-10, 10, 1)
y = 3*x + 1
plt.plot(x, y) # Grafica de una linea recta
plt.title("Grafico Lineal")
plt.grid()
plt.show()
plt.close()
Gratifica de una
x = np.arange(0, 2*np.pi, 0.001)
plt.plot(x, np.sin(x)) # Grafica de una senoide
plt.title("Grafico de una función seno")
plt.grid()
plt.show()
plt.close()
x = np.arange(-10, 10, 0.001)
y = 10*np.exp(3*x)
plt.plot(x, y) # Grafica de una exponencial
plt.title("Grafico de una exponencial")
plt.grid()
plt.show()
plt.close()
x = np.arange(0, 100, 1)
y = 1e3*x**2
plt.plot(x, y) # Grafica de una potencial
plt.grid()
plt.show()
plt.close()
También se puede dar un mejor formato a los grafico cambiando estilos de línea, marcadores y colores.
Estilos de Líneas +, Cruz Colores (color=):
(linestyle=) ., Punto b, blue
-, Línea Sólida o,Círculo g, green
--, Línea discontinua *, Estrellas r, red
:, Línea punteada p, Pentágonos c, cyan
-., Línea punteada s, cuadrados m, magenta
discontinua. x, Tachados y, yellow
None, Ninguna línea D, Diamantes k, black
h, Hexágonos y w, white
^, Triángulos
Marcadores (marker=):
Ejemplo:
x = np.arange(0, 10, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, "r-s", label="Seno")
plt.plot(x, y2, "g:p", label="Coseno")
plt.grid(True)
plt.xlabel("eje x")
plt.ylabel("eje y")
plt.title("Graficas seno y coseno")
plt.legend()
plt.grids()
plt.show()
plt.close()
import numpy as np
Varias graficas en una
import matplotlib.pyplot as plt
sola imagen
x = np.arange(0, 10, 0.001
y1 = x**2
y2 = np.exp(x)
plt.subplot(2, 2, 1)
plt.plot(x, y1, 'r-.',label="y=x^2")
plt.tight_layout()
plt.title("Funcion potencia")
plt.legend()
plt.xlabel("eje x")
plt.ylabel("eje y")
plt.grid(True)
plt.subplot(2, 2, 2)
y2=y2*1e2
plt.plot(x, y2,'g-',label="e^x")
plt.tight_layout()
plt.title("Funcion exponencial")
plt.legend()
plt.xlabel("eje x")
plt.ylabel("eje y")
plt.grid(True)
plt.subplot(2, 2, 3)
plt.plot(x, np.sin(x) + 2*np.cos(x),'k:',label="y=sin(x)+2cos(x)")
plt.tight_layout()
plt.title("Funcion senoidal")
plt.legend()
plt.xlabel("eje x")
GUIA DE LABORATORIO 4: INTRODUCCIÓN A LOS MODULOS Y LAS GRAFICAS EN PYTHON.
plt.ylabel("eje y")
plt.grid(True)
UNIVERSIDAD DE EL SAVADOR ANALISIS NUMERICO - ANN115 M.SC. E ING. WILBER CALDERON
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
Histogramas:
import numpy as np
import matplotlib.pyplot as plt
#Definir los datos
a = [22,55,62,45,21,22,34,42,42,4,2,100,95,85,55,55,60,70,65,55,71,45,80,75,65,
54,44,43,42,48]
bins = [0,20,40,60,80,100]
#Configurar las características del gráfico
plt.hist(a, bins,edgecolor='black', color = 'blue')
#Definir título y nombres de ejes
plt.title('Histograma')
plt.ylabel('Eje Y')
plt.xlabel('Eje X')
#Mostrar figura
plt.grid(True)
plt.show()
plt.close()
Gráfico circular:
import matplotlib.pyplot as plt
#Definir los datos
ls=['Mango', 'Fresa' , 'Naranja' , 'Sandia' , 'Uva']
sizes= [40,15,20,10,15]
colores = ['green','red','orange','yellow','purple']
explode=(0.6,0,0,0,0)
#Configurar las características del gráfico
plt.pie(sizes, labels=ls, colors=colores, startangle=90, shado
w=True, autopct='%1.1f%%')
axis('equal')
#Definir título
plt.title('Gráfico circular')
#Mostrar figura
plt.show()
plt.close()
figuras en 3D:
#importando modulos
import numpy as np
import matplotlib.pyplot as plt
#creando figura
fig.plt.figure()
#definiendo ejes 3d
ax=plt.axes(projection="3d")
#x(t)=2*cos(3*t)
#y(t)=(x**2)*sen(t)
#z(t)=t
#asignando valores de la funcion parametrica
z=np.linspace(0,10,50)
GUIA DE LABORATORIO 4: INTRODUCCIÓN A LOS MODULOS Y LAS GRAFICAS EN PYTHON.
x=np.cos(z)
y=2*np.sin(z)
#ploteo de la figura
ax.plot3D(x,y,z, 'g-.',label='curva parametrica')
UNIVERSIDAD DE EL SAVADOR ANALISIS NUMERICO - ANN115 M.SC. E ING. WILBER CALDERON
FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA ELECTRICA
Asignaciones de laboratorio.
Desarrollar la guía de laboratorio.
Asignaciones ex aula
Demuestre el proceso de instalación de los módulos usados en la guía.
5
Teniendo la siguiente función compleja H= haga las graficas en dos ejes separados
1+ jx
(usando la función subplot). De su magnitud en decibelios (20Log(|H|)) y de su fase en grados.
Usados ejes semilogarítmicos.
Haga una función que haga la gráfica de y=A*B^(C*x) donde A, B y C son valores que pasaran a
la función. Así como también los límites de la variable “X” y el número de puntos a graficar,
donde B>0.
Realizar un grafico utilizando la función contour, dejar los comentarios necesarios para la
explicación del código.
Realizar un gráfico utilizando la función treamplot que es una función de trazado de secuencia, o
trazado aerodinámico, se utiliza para mostrar campos vectoriales 2D.
Bibliografía
https://matplotlib.org/index.html
https://matplotlib.org/3.2.1/api/pyplot_summary.html
https://www.youtube.com/watch?v=-H_02bZsvKw