Python:使用Python绘制和动画相同图形的多个迭代

时间:2017-06-16 20:07:50

标签: python animation matplotlib graphing

嗨我正在尝试创建一个向左移动的15个高斯图的电影(这基本上就是代码所要做的) 但是,我如何创建for循环以创建15个图形的想法并没有创建超过1,它只加快了动画。 类似的代码在matlab上工作。它创建了15种不同的高斯曲线。 这是我的代码示例。 任何帮助,将不胜感激。 感谢

import numpy as np
import matplotlib.pyplot as plt
plt.switch_backend('agg')
import matplotlib.animation as animation

Gamma=0.0005
q=1.6e-19
m=0.067*9e-31
B=10
Ec=(1.0567e-34)*B/m
#e=2.78

#E0=0+(1.0567e-34)*x*i/m

fig, ax = plt.subplots()

pass
x = np.arange(0, 3.4e-3, 1.7e-5)        # x-array, third number is interval here, x is energy
line, = ax.plot(x, np.e**(-(x-((1.0567e-34)*1*1/m))**2/Gamma**2))


def animate(i):

    for p in xrange(1,3):   
        line.set_ydata(np.e**((-(x-((1.0567e-34)*p*i/m))**2)/Gamma**2))  # update the data
        return line,

#Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, np.arange(0, 2, .01), init_func=init,
    interval=10, blit=True)
Writer = animation.writers['ffmpeg']
writer = Writer(fps=20, metadata=dict(artist='Me'), bitrate=1800)

ani.save('QHanimati.mp4', writer=writer)

plt.show()

1 个答案:

答案 0 :(得分:0)

您目前在代码中只有一行。此行已更新。如果你想拥有更多的线条,你需要创建更多的线条 然后,您还需要更新所有这些行。

(由于p的作用并未从​​示例中清除,因此我将其作为一些递增数字。我还将此限制为8条曲线,不会过度拥挤图像。)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

Gamma=0.0005
q=1.6e-19
m=0.067*9e-31
B=10
Ec=(1.0567e-34)*B/m

fig, ax = plt.subplots()

n = 8 # number of lines
x = np.arange(0, 3.4e-3, 1.7e-5)        
lines = [ax.plot(x, np.e**(-(x-((1.0567e-34)*1*1/m))**2/Gamma**2))[0] for _ in range(n)]


def animate(i):
    for ln, line in enumerate(lines):
        p = (ln+1)/10.
        line.set_ydata(np.e**((-(x-((1.0567e-34)*p*i/m))**2)/Gamma**2))  # update the data
    return lines

#Init only required for blitting to give a clean slate.
def init():
    for line in lines:
        line.set_ydata(np.ma.array(x, mask=True))
    return lines

ani = animation.FuncAnimation(fig, animate, np.arange(0, 2, .01), init_func=init,
    interval=10, blit=True)

plt.show()

enter image description here