Ahora que ya he empezado a hacer pruebas con Jupyter Notebook, el siguiente paso que quiero probar es hacer gráficos interactivos. Pues ha resultado ser más fácil y rápido de lo que pensaba.
Partimos de un script python que simula los datos experimentales de una trayectoria parabólica, y calcula la parábola que mejor se ajusta (regresión cuadrática). A partir de la ecuación de la parábola se puede deducir la constante g (=9,81 m/s2). Simulamos los datos experimentales introduciendo un error de ruido en los datos teóricos. Pues bien, con mi gráfico interactivo puedo jugar con el nivel de ruido y con el número de puntos del muestreo, tal com se ve en el video. El código queda de la siguiente forma:
%matplotlib inline from ipywidgets import interactive import numpy as np import pylab as plt from IPython.display import display, Math, Latex # tir parabòlic: y = vy*t - .5gt^2 vy = 10 # 10m/s g = 9.81 # m/s^2 t_max = 2*vy/g def f(nivell_soroll, num_punts): t = np.linspace(0, t_max, num_punts) y_or = vy*t - .5*g*t**2 noise = np.random.normal(0, nivell_soroll, num_punts) # simulem dades experimentals y = y_or + noise # ajustament a una paràbola z = np.polyfit(t, y, 2) g_exp = 2.0*z[0] t_ = np.linspace(0, t_max, 100) y_ = z[0]*t_**2 + z[1]*t_ + z[2] fig, ax = plt.subplots() plt.plot(t_, y_, t, y, 'bo') plt.suptitle("Tir parabòlic. Regressió quadràtica") plt.title("y = " + str(round(z[0],3)) + "t^2 + " + str(round(z[1],3)) + "t + " + str(round(z[2],3)) + " -> g exp = " + str(round(g_exp,3)) + " m/s^2") ax.set(xlabel='temps (s)', ylabel='y (m)') ax.grid() plt.show() interactive_plot = interactive(f, nivell_soroll=(0.0, 2.0), num_punts=(10, 50)) interactive_plot
Otra cosa que me interesa es la manera de exportar estos Jupyter Notebooks a una web, conservando las gráficas y las fórmulas en format Latex (aunque se pierda la interacció con las gráficas). Esto se consigue directamente exportando el Notebook a html:
$ jupyter nbconvert --execute tir_parabolic.ipynb --to html
e integrando este código en una web donde haya más texto y explicaciones, y con la librería Bootstrap.