Documentos de Académico
Documentos de Profesional
Documentos de 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'
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
senoidal:
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()
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
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 = 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:
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
#definimos la figura
fig = plt.figure()
ax = fig.gca(projection='3d')
# datos de la grid.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5,5, 0.25)
X, Y = np.meshgrid(X, Y)
Z = (4(((X**2)/8)+((Y**2)/16)))**0.5
# plot de figura.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
# personalizando eje Z
ax.set_zlim(-10, 10)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
# Añadir una barra de color que asigne valores a los colores
fig.colorbar(surf, shrink=0.5, aspect=5)
#Definir título y nombres de ejes
plt.title('Grafico 3D')
plt.ylabel('Eje Y')
plt.xlabel('Eje X')
plt.show()
plt.close()
from Tkinter import*
v0=Tk() #Con esto definimos la ventana principal
v0.title(“mi primera ventana”) #Coloca un título a la ventana
v0.config(bg= “cyan”) #Definimos el color del fondo
v0.geometry(“500x500”) #Ajustamos el tamaño de la ventana
v0.resizable(0,0) #Evita la modificación de tamaño
v0.mainloop() #Finalización
Los elementos como etiquetas(labels), botones y cajas de texto se posicionan en la ventana a traves de
la funcion grid() en una distribución matricial indicando la posicion fila(row) y columna(column).
En el caso de las cajas de texto es necesario definir el tipo de variable con el que van a trabajar porque
luego el programa hará uso de esos datos y deben de ser acordes a las operaciones, siendo aceptables
IntVar(), StringVar(), BooleanVar(), DoubleVar(). Usando para modificar nombre.set() y solicitar el dato
con nombre.get().
v2=Tk()
v2.title("Usando Entry")
string=StringVar()
string1=StringVar()
def capturar(string,stringvar):
El parametron relief se encarga de la apariencia del borde del objeto pudiendo este tener los siguientes
stringvar.set(string)
valores: SUNKEN,RAISED,GROOVE,RIDGE y FLAT siendo es ultimo el utilizado por defecto
lb2=Label(v2, text="Usuario:")
lb2.grid(row=3,column=1)
lb3=Label(v2, textvar=string1)
Cursor nos da la posibilidad de indicar que cursor queremos que se muestre sobre cierto objeto
lb3.grid(row=3,column=2)
pudiendo ser estos: x_cursor, arrow, based_arrow_down, based_arrow_up, boat, bogosity,
B2=Button(v2,text="Escribir",command=lambda:capturar(string.get(),string1))
bottom_side, box_spiral, center_ptr, circle.
B2.grid(row=5,column=1)
Ventanas
v2.mainloop()
Tk() es una ventana principal, pero podemos declarar más variables:
Asignaciones de laboratorio.
Desarrollar la guía de laboratorio.
Haga una funcion que haga la grafica de y=A*B^(C*x) donde A, B y C son valores que pasaran a
la funcion. Asi como también los limites de la variable xy el numero de puntos a graficar, donde
B>0.
Utilizando la asignación de laboratorio de la guía anterior desarrollar una interfaz grafica que
calcule el mcm y el mcd de 2 numeros
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
Repita la asignación de laboratorio pero que el problema sea presentado a través de una
interfaz grafica
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