1. widgets
November 10, 2022
1 Interfaces de usuario en Jupyter con ipywidgets
Jupyter y IPython permiten no sólo visualizar datos sino también interactuar con ellos en tiempo
real
Para lograr esto estudiaremos los componentes de la librería ipywidgets
1.1 ¿Qué es un widget?
Un widget es un elemento gráfico que permite interactuar con una aplicación
Un conjunto de widgets forman una interfaz de usuario gráfica (Graphical user interface o GUI)
La siguiente imagen muestra los widgets típicos que se encuentran en las aplicaciones de PC
La librería ipywidgets provee controles que permiten interactuar con funciones de Python
Entre los muchos widgets disponibles se encuentran: - Botones e selectores (check-box) - Listas
desplegables (combo-box) - Campos de ingreso de texto (text-box) - Deslizadores (sliders)
Instalación
La forma más sencilla de instalar es usando conda
conda install ipywidgets
Si lo instalas de otra manera (pip o python setup.py) es necesario habilitar la extensión
pip install ipywidgets --user
jupyter nbextension enable --py widgetsnbextension
1.2 Creación semi-automática de widgets
Una manera rápida de implementar widgets es usar el decorador interact
Al aplicar el decorador a una función convertiremos sus argumentos de entrada en
widgets
Cada entrada genera y se enlaza a un widget según su tipo:
• Un entero produce un widget IntSlider
• Un flotante produce un widget FloatSlider
• Un booleando produce un widget Checkbox
• Una lista produce un widget Dropdown
• Un string produce un widget Text
1
2. Los argumentos del decorador permiten entregar algunas opciones a los widgets
[6]: %matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import ipywidgets as widgets
[8]: @widgets.interact(a=(0,20,2), b=(0,5,0.01))
def controles(a=0,b=0):
display(a,b)
interactive(children=(IntSlider(value=0, description='a', max=20, step=2),␣
↪FloatSlider(value=0.0, description=…
1.2.1 Aplicaciones a Series de Fourier
𝑓(𝑡) =
𝑎0
2
+
∞
∑
𝑘=1
[𝑎𝑘 cos (
2𝜋𝑘
𝑇
𝑡) + 𝑏𝑘 sin (
2𝜋𝑘
𝑇
𝑡)]
Serie de Fourier
𝑓(𝑡) = 𝑡, −2 ≤ 𝑡 ≤ 2
[70]: # para el tiempo
%matplotlib notebook
t=np.arange(0,60.,0.01)
def serie_f(t,T,N):
suma=np.zeros_like(t)# crea vector de ceros del mismo tamano de t
for k in range(1,N+1):
suma += (4/np.pi)*((-1)**(k+1)/k)*np.sin((2*np.pi*k/T)*t)
return suma
fig,eje=plt.subplots(figsize=(9,5),tight_layout=True)
#eje.plot(t,serie_f(t,2,2))
def grafica(T,N):
eje.cla()
eje.plot(t,serie_f(t,T,N))
widgets.interact(grafica,T=widgets.FloatSlider(min=0.01,max=6,step=0.1,value=0.
↪2),
N=widgets.IntSlider(min=1,max=222,step=1))
<IPython.core.display.Javascript object>
<IPython.core.display.HTML object>
2
3. interactive(children=(FloatSlider(value=0.2, description='T', max=6.0, min=0.
↪01), IntSlider(value=1, descripti…
[70]: <function __main__.grafica(T, N)>
[1]: # analisis del audio de esa senal
from IPython.display import Audio
Audio(serie_f(t,11,100),rate=3100)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [1], in <cell line: 4>()
1 # analisis del audio de esa senal
2 from IPython.display import Audio
----> 4 Audio(serie_f(t,11,100),rate=3100)
NameError: name 'serie_f' is not defined
[110]: F=44100
time=np.arange(0.,3,1/F)
senal=0.5*np.sin(2*np.pi*220*time)
Audio(senal,rate=F)
[110]: <IPython.lib.display.Audio object>
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
[ ]:
3