Está en la página 1de 18

UNIVERSIDAD DE EL SAVADOR ANALISIS NUMERICO - ANN115 M.SC. E ING.

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

 Conocer lo módulos en Python y utilizarlos de forma correcta a la hora de realizar un programa.

Objetivos especificos

 Aprender a usar módulos en Python.

 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.

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

Importación de módulos en Python


Las dos maneras más comunes para importar un módulo son:

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 

Vemos que la primera línea no importa directamente las


funciones del módulo, sino que debemos utilizar el nombre math para acceder a ellas, tanto para las
funciones como para las constantes que el módulo tiene definidas. Es decir, que, en el espacio de
nombre actual, solo hemos metido el nombre del módulo, no de las funciones o variables del mismo.
Podemos darle un nombre local a una función para
usarla de manera más In [20]: m = math.sin  cómoda:

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

Si escribimos cos(9) nos dará el error NameError: name 'cos' is not defined porque al espacio


de nombre actual solo hemos invocado los nombres de las funciones sin() y de la constante pi. Si lo que
deseamos es usar todas las funciones y variables de un módulo, podemos traerlas todas de la siguiente
manera:

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

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

La última línea nos dará el error TypeError: can't convert complex to float. ¿Qué sucedió? Se


importaron ambos módulos. Prueba de ello es que las funciones degrees() y phase(), cada una particular
del módulo math y cmath, respectivamente, funcionaron. Entonces, ¿por qué da error la llamada de la
función sin()? La razón es que Python reconoce con el nombre sin la última función importada con ese
nombre, es decir, la de math.

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.

El siguiente ejemplo hace uso de ella:

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']

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

Módulos NumPy y Matplotlib

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.

Por ejemplo, la siguiente línea:

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.

Otro ejemplo es:

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.

Sin embargo, si utilizamos el módulo NumPy:

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

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

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()

Nos debería mostrar una imagen parecida a la siguiente:

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.

Gráfica de una línea recta:

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

Gráfica de una exponencial:

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()

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

Gráfica de una potencial:

x = np.arange(0, 100, 1) 

y = x**2 

plt.plot(x, y) # Grafica de una potencial 
 
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

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:

Dos gráficos sobre el mismo eje:

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()

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

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

Algunas otras funciones con las cuales cuenta matplotlib:

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()

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

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()

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

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()

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

Introducción a las interfaces graficas en Python


Para poder crear interfaces graficas trabajaremos con el módulo Tkinter el cual importaremos con los
métodos utilizados anteriormente

Con los siguientes comandos podremos definir una ventana

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

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

Para definir botones y labels

from Tkinter import*


v1=Tk() #Con esto definimos la ventana principal
v1.title("Label y botones") #Titulo de la ventana
lb1=Label(v1, text="boton") #Definicion de un label
lb1.grid(row=1,column=1) #Ubicamos label en la ventana
btn1=Button(v1,text="help") #Definicion de un boton
btn1.grid(row=2,column=1) #Ubicamos botón en la ventana
v1.mainloop()

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().

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

from Tkinter import*

v2=Tk()
v2.title("Usando Entry")

string=StringVar()
string1=StringVar()

Modificar los parámetro de un Label, boton y entry


lb1=Label(v2, text="Usuario:")
Selb1.grid(row=1,column=1)
puede modificar los colores de estos objetos ya sea poniendo el código del color en hexadecimal o
caja=Entry(v2,textvariable=string)
bien poniendo el nombre del color en ingles en los parámetros background(bg) y foreground(fg) que
caja.grid(row=1,column=2)
corresponden al color de fondo y del texto respectivamente
B1=Button(v2,text="Salir", command=v2.destroy)
 Btn1=Button(v0,text=”exit”,bg= “00FFFF”, fg= “black”)
B1.grid(row=2,column=2)

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:

Toplevel: crea una nueva ventana

Frame: Coloca los paneles para ordenar los elementos

Canvas: Para dibujar y graficar funciones

Button: Para colocar un botón

Label: Para colocar una etiqueta

Message: Para colocar un texto

Entry: Para colocar una entrada de texto de una linea

Text: Para colocar una entrada de texto de varias líneas

Listbox: Coloca una lista con elementos clickeables

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

Menu: Coloca un menú que puede contener cascadas y elementos clickeables

from Tkinter import*


v0=Tk()
v1=Toplevel(v0)
v0.title("Padre")
v1.title("Hijo")
v0.config(bg="lime")
v0.geometry("250x250")
def mostrar(ven):
ven.deiconify()
def ocultar(ven):
ven.withdraw()
B1=Button(v0,text="Abrir",command=lambda:mostrar(v1))
B1.grid(row=1,column=1)
B2=Button(v0,text="Ocultar",command=lambda:ocultar(v1))
B2.grid(row=3,column=1)
B3=Button(v0,text="Salir",command=v0.destroy)
B3.grid(row=2,column=1)
v1.withdraw()
v0.mainloop()

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

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

GUIA DE LABORATORIO 4: INTRODUCCIÓN A LOS MODULOS Y LAS GRAFICAS EN PYTHON.

También podría gustarte