# Convolution integral export as animation

4 messages
Open this post in threaded view
|

## Convolution integral export as animation

 This example is taken from a tutorial related to convolution integral.I would like to export this example as animation in mp4 format. So far, the code looks like this :import scipy.integrate import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def showConvolution(t0,f1, f2): # Calculate the overall convolution result using Simpson integration convolution = np.zeros(len(t)) for n, t_ in enumerate(t): prod = lambda tau: f1(tau) * f2(t_-tau) convolution[n] = scipy.integrate.simps(prod(t), t) # Create the shifted and flipped function f_shift = lambda t: f2(t0-t) prod = lambda tau: f1(tau) * f2(t0-tau) # Plot the curves plt.gcf().clear() # il plt.subplot(211) plt.gca().set_ymargin(0.05) # il plt.plot(t, f1(t), label=r'$f_1(\tau)$') plt.plot(t, f_shift(t), label=r'$f_2(t_0-\tau)$') plt.fill(t, prod(t), color='r', alpha=0.5, edgecolor='black', hatch='//') # il plt.plot(t, prod(t), 'r-', label=r'$f_1(\tau)f_2(t_0-\tau)$') plt.grid(True); plt.xlabel(r'$\tau$'); plt.ylabel(r'$x(\tau)$') # il plt.legend(fontsize=10) # il plt.text(-4, 0.6, '$t_0=%.2f$' % t0, bbox=dict(fc='white')) # il # plot the convolution curve plt.subplot(212) plt.gca().set_ymargin(0.05) # il plt.plot(t, convolution, label='$(f_1*f_2)(t)$') # recalculate the value of the convolution integral at the current time-shift t0 current_value = scipy.integrate.simps(prod(t), t) plt.plot(t0, current_value, 'ro') # plot the point plt.grid(True); plt.xlabel('$t$'); plt.ylabel('$(f_1*f_2)(t)$') # il plt.legend(fontsize=10) # il plt.show() # il Fs = 50 # our sampling frequency for the plotting T = 5 # the time range we are interested in t = np.arange(-T, T, 1/Fs) # the time samples f1 = lambda t: np.maximum(0, 1-abs(t)) f2 = lambda t: (t>0) * np.exp(-2*t) t0 = np.arange(-2.0,2.0, 0.05) fig = plt.figure(figsize=(8,3)) anim = animation.FuncAnimation(fig, showConvolution, frames=t0, fargs=(f1,f2),interval=80) anim.save('animation.mp4', fps=30) # fps = frames per second plt.show()When I run the program I see the output of see the output of convolution integral at t0 = -0.20.Is there a way to change t0 so that I'd like to able to save it as animation as in the tutorial In the example t0 decreases from -2.0 to -1.95 etc the green curve is shifted right, and the area between curves, product increases. In the tutorial there is an html animation and I would like to save as mp4 file.I've also added source code as an attachment. _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users convolution.py (2K) Download Attachment
Open this post in threaded view
|

## Re: Convolution integral export as animation

 Erdem,I do not understand your question.  If I run that code I do get an mp4 file of the animation.TomOn Sat, May 18, 2019 at 6:05 PM Erdem <[hidden email]> wrote:This example is taken from a tutorial related to convolution integral.I would like to export this example as animation in mp4 format. So far, the code looks like this :import scipy.integrate import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def showConvolution(t0,f1, f2): # Calculate the overall convolution result using Simpson integration convolution = np.zeros(len(t)) for n, t_ in enumerate(t): prod = lambda tau: f1(tau) * f2(t_-tau) convolution[n] = scipy.integrate.simps(prod(t), t) # Create the shifted and flipped function f_shift = lambda t: f2(t0-t) prod = lambda tau: f1(tau) * f2(t0-tau) # Plot the curves plt.gcf().clear() # il plt.subplot(211) plt.gca().set_ymargin(0.05) # il plt.plot(t, f1(t), label=r'$f_1(\tau)$') plt.plot(t, f_shift(t), label=r'$f_2(t_0-\tau)$') plt.fill(t, prod(t), color='r', alpha=0.5, edgecolor='black', hatch='//') # il plt.plot(t, prod(t), 'r-', label=r'$f_1(\tau)f_2(t_0-\tau)$') plt.grid(True); plt.xlabel(r'$\tau$'); plt.ylabel(r'$x(\tau)$') # il plt.legend(fontsize=10) # il plt.text(-4, 0.6, '$t_0=%.2f$' % t0, bbox=dict(fc='white')) # il # plot the convolution curve plt.subplot(212) plt.gca().set_ymargin(0.05) # il plt.plot(t, convolution, label='$(f_1*f_2)(t)$') # recalculate the value of the convolution integral at the current time-shift t0 current_value = scipy.integrate.simps(prod(t), t) plt.plot(t0, current_value, 'ro') # plot the point plt.grid(True); plt.xlabel('$t$'); plt.ylabel('$(f_1*f_2)(t)$') # il plt.legend(fontsize=10) # il plt.show() # il Fs = 50 # our sampling frequency for the plotting T = 5 # the time range we are interested in t = np.arange(-T, T, 1/Fs) # the time samples f1 = lambda t: np.maximum(0, 1-abs(t)) f2 = lambda t: (t>0) * np.exp(-2*t) t0 = np.arange(-2.0,2.0, 0.05) fig = plt.figure(figsize=(8,3)) anim = animation.FuncAnimation(fig, showConvolution, frames=t0, fargs=(f1,f2),interval=80) anim.save('animation.mp4', fps=30) # fps = frames per second plt.show()When I run the program I see the output of see the output of convolution integral at t0 = -0.20.Is there a way to change t0 so that I'd like to able to save it as animation as in the tutorial In the example t0 decreases from -2.0 to -1.95 etc the green curve is shifted right, and the area between curves, product increases. In the tutorial there is an html animation and I would like to save as mp4 file.I've also added source code as an attachment. _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- Thomas Caswell[hidden email] _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
 Please don't drop the mailing list from the replies.Ah, I ran it by invoking the script in an IPython session where plt.ion() has been called and plt.show() in non-blocking.  If I run it as as script I see what you descirbe!Removing the plt.show() calls from inside of the re-draw function allows it to run end-to-end and write out the animation.TomOn Sun, May 19, 2019 at 5:59 PM Erdem <[hidden email]> wrote:Thank you very much.My operating system is Ubuntu 18.04 LTS 64 bit. I've set up a virtual python environment and to activate I use this command.$. venv/bin/activateI've saved source file as convolution py. To run the source code I use this command$ python convolution.pyBut rather than an animation I see only a plot of integral at t0=-2.00I wait some time and nothing happens. I've also tried to close window a few times and the result is same.Since you may be able to get an mp4 file of the animation may it be because of some codecs are missing or may be a bug?ErdemThomas Caswell <[hidden email]>, 20 May 2019 Pzt, 00:17 tarihinde şunu yazdı:Erdem,I do not understand your question.  If I run that code I do get an mp4 file of the animation.TomOn Sat, May 18, 2019 at 6:05 PM Erdem <[hidden email]> wrote:This example is taken from a tutorial related to convolution integral.I would like to export this example as animation in mp4 format. So far, the code looks like this :import scipy.integrate import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def showConvolution(t0,f1, f2): # Calculate the overall convolution result using Simpson integration convolution = np.zeros(len(t)) for n, t_ in enumerate(t): prod = lambda tau: f1(tau) * f2(t_-tau) convolution[n] = scipy.integrate.simps(prod(t), t) # Create the shifted and flipped function f_shift = lambda t: f2(t0-t) prod = lambda tau: f1(tau) * f2(t0-tau) # Plot the curves plt.gcf().clear() # il plt.subplot(211) plt.gca().set_ymargin(0.05) # il plt.plot(t, f1(t), label=r'$f_1(\tau)$') plt.plot(t, f_shift(t), label=r'$f_2(t_0-\tau)$') plt.fill(t, prod(t), color='r', alpha=0.5, edgecolor='black', hatch='//') # il plt.plot(t, prod(t), 'r-', label=r'$f_1(\tau)f_2(t_0-\tau)$') plt.grid(True); plt.xlabel(r'$\tau$'); plt.ylabel(r'$x(\tau)$') # il plt.legend(fontsize=10) # il plt.text(-4, 0.6, '$t_0=%.2f$' % t0, bbox=dict(fc='white')) # il # plot the convolution curve plt.subplot(212) plt.gca().set_ymargin(0.05) # il plt.plot(t, convolution, label='$(f_1*f_2)(t)$') # recalculate the value of the convolution integral at the current time-shift t0 current_value = scipy.integrate.simps(prod(t), t) plt.plot(t0, current_value, 'ro') # plot the point plt.grid(True); plt.xlabel('$t$'); plt.ylabel('$(f_1*f_2)(t)$') # il plt.legend(fontsize=10) # il plt.show() # il Fs = 50 # our sampling frequency for the plotting T = 5 # the time range we are interested in t = np.arange(-T, T, 1/Fs) # the time samples f1 = lambda t: np.maximum(0, 1-abs(t)) f2 = lambda t: (t>0) * np.exp(-2*t) t0 = np.arange(-2.0,2.0, 0.05) fig = plt.figure(figsize=(8,3)) anim = animation.FuncAnimation(fig, showConvolution, frames=t0, fargs=(f1,f2),interval=80) anim.save('animation.mp4', fps=30) # fps = frames per second plt.show()When I run the program I see the output of see the output of convolution integral at t0 = -0.20.Is there a way to change t0 so that I'd like to able to save it as animation as in the tutorial In the example t0 decreases from -2.0 to -1.95 etc the green curve is shifted right, and the area between curves, product increases. In the tutorial there is an html animation and I would like to save as mp4 file.I've also added source code as an attachment. _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- Thomas Caswell[hidden email] -- Thomas Caswell[hidden email] _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users
 Try 'reply-all' instead?Yes, that is controlled by the fps kwarg to anim.save.Glad it is working!TomOn Sun, May 19, 2019 at 6:23 PM Erdem <[hidden email]> wrote:My reply does not show in the mail list. I have no idea why this happened but I simply use Gmail to reply. I used to use Gnus message reader with Emacs but I think it is not installed for now.Thanks now it works as expected! Is there a way to slow down animation a bit.ErdemThomas Caswell <[hidden email]>, 20 May 2019 Pzt, 01:05 tarihinde şunu yazdı:Please don't drop the mailing list from the replies.Ah, I ran it by invoking the script in an IPython session where plt.ion() has been called and plt.show() in non-blocking.  If I run it as as script I see what you descirbe!Removing the plt.show() calls from inside of the re-draw function allows it to run end-to-end and write out the animation.TomOn Sun, May 19, 2019 at 5:59 PM Erdem <[hidden email]> wrote:Thank you very much.My operating system is Ubuntu 18.04 LTS 64 bit. I've set up a virtual python environment and to activate I use this command.$. venv/bin/activateI've saved source file as convolution py. To run the source code I use this command$ python convolution.pyBut rather than an animation I see only a plot of integral at t0=-2.00I wait some time and nothing happens. I've also tried to close window a few times and the result is same.Since you may be able to get an mp4 file of the animation may it be because of some codecs are missing or may be a bug?ErdemThomas Caswell <[hidden email]>, 20 May 2019 Pzt, 00:17 tarihinde şunu yazdı:Erdem,I do not understand your question.  If I run that code I do get an mp4 file of the animation.TomOn Sat, May 18, 2019 at 6:05 PM Erdem <[hidden email]> wrote:This example is taken from a tutorial related to convolution integral.I would like to export this example as animation in mp4 format. So far, the code looks like this :import scipy.integrate import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def showConvolution(t0,f1, f2): # Calculate the overall convolution result using Simpson integration convolution = np.zeros(len(t)) for n, t_ in enumerate(t): prod = lambda tau: f1(tau) * f2(t_-tau) convolution[n] = scipy.integrate.simps(prod(t), t) # Create the shifted and flipped function f_shift = lambda t: f2(t0-t) prod = lambda tau: f1(tau) * f2(t0-tau) # Plot the curves plt.gcf().clear() # il plt.subplot(211) plt.gca().set_ymargin(0.05) # il plt.plot(t, f1(t), label=r'$f_1(\tau)$') plt.plot(t, f_shift(t), label=r'$f_2(t_0-\tau)$') plt.fill(t, prod(t), color='r', alpha=0.5, edgecolor='black', hatch='//') # il plt.plot(t, prod(t), 'r-', label=r'$f_1(\tau)f_2(t_0-\tau)$') plt.grid(True); plt.xlabel(r'$\tau$'); plt.ylabel(r'$x(\tau)$') # il plt.legend(fontsize=10) # il plt.text(-4, 0.6, '$t_0=%.2f$' % t0, bbox=dict(fc='white')) # il # plot the convolution curve plt.subplot(212) plt.gca().set_ymargin(0.05) # il plt.plot(t, convolution, label='$(f_1*f_2)(t)$') # recalculate the value of the convolution integral at the current time-shift t0 current_value = scipy.integrate.simps(prod(t), t) plt.plot(t0, current_value, 'ro') # plot the point plt.grid(True); plt.xlabel('$t$'); plt.ylabel('$(f_1*f_2)(t)$') # il plt.legend(fontsize=10) # il plt.show() # il Fs = 50 # our sampling frequency for the plotting T = 5 # the time range we are interested in t = np.arange(-T, T, 1/Fs) # the time samples f1 = lambda t: np.maximum(0, 1-abs(t)) f2 = lambda t: (t>0) * np.exp(-2*t) t0 = np.arange(-2.0,2.0, 0.05) fig = plt.figure(figsize=(8,3)) anim = animation.FuncAnimation(fig, showConvolution, frames=t0, fargs=(f1,f2),interval=80) anim.save('animation.mp4', fps=30) # fps = frames per second plt.show()When I run the program I see the output of see the output of convolution integral at t0 = -0.20.Is there a way to change t0 so that I'd like to able to save it as animation as in the tutorial In the example t0 decreases from -2.0 to -1.95 etc the green curve is shifted right, and the area between curves, product increases. In the tutorial there is an html animation and I would like to save as mp4 file.I've also added source code as an attachment. _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users -- Thomas Caswell[hidden email] -- Thomas Caswell[hidden email] -- Thomas Caswell[hidden email] _______________________________________________ Matplotlib-users mailing list [hidden email] https://mail.python.org/mailman/listinfo/matplotlib-users