带有contourf()动画的2D行波?

时间:2017-06-11 15:55:32

标签: python numpy matplotlib wave contourf

你好我想要python轮廓动画。例如,每一秒波浪将从中心诞生并传播到周边。但我只希望它与级别[0.0, 0.8]波一起。轮廓和颜色都可以,但动画效果不佳。如果有人可以帮我吗?最后我想要这样的事情:

2D Traveling Wave

有谁知道如何在时间和我的功能之间建立联系?我已经使用time模块生成每次轮廓更改但它不起作用。

%pylab nbagg
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation
import matplotlib.animation as animation

#### generate some x,y,z data ####
r = np.linspace(0,6,  num=100)
phi = np.linspace(0, 2*np.pi, num=200)
R, Phi = np.meshgrid(r,phi)
x = R*np.cos(Phi)
y = R*np.sin(Phi)
z = R
##################################

fig, ax=plt.subplots()

def data(x,y,z,i):

    x = R*np.cos(Phi)
    y = R*np.sin(Phi)
    z = R-i
    return z

def draw(i):
        Z = data(x,y,z,i) 
        colors=('y','b')

        levels = [0.0,0.8]
        contourf(x,y,z,colors=('b', 'b', 'b', 'b', 'b', 'b', 'b','b'))
        contourf(x,y,Z,levels=levels,colors=('y', 'b', 'b', 'b', 'b', 'b', 'b','b'))
        #colorbar()


def animate(i):
        ax.clear()
        draw(i)
        return ax,

draw(0)     


ani = animation.FuncAnimation(fig,animate,np.arange(1, 10, .1),interval=5, blit=True)


plt.show()

1 个答案:

答案 0 :(得分:0)

在你的行

ani = animation.FuncAnimation(fig,animate,np.arange(1,10),interval=5, blit=True)

只需向np.arange()添加一个步骤:np.arange(1, 10, .1)

最后一个参数确定增量。在您的情况下np.arange()生成了一个数组

[1, 2, 3, 4, 5, 6, 7, 8, 9]

然后动画功能显示那些时间的情节。通过将步长从默认值1减少到0.1,animate函数有时会评估绘图

[1, 1.1, 1.2,..., 8.8, 8.9]

使动画更加流畅。

编辑:添加多个轮廓。

使用for循环,我会添加一些轮廓并将它们及时移回,以便它们在动画开始后出现一段时间。

%pylab nbagg
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation
import matplotlib.animation as animation

#### generate some x,y,z data ####
r = np.linspace(0,6, num=100)
phi = np.linspace(0, 2*np.pi, num=200)
R, Phi = np.meshgrid(r,phi)
x = R*np.cos(Phi)
y = R*np.sin(Phi)
z = R
##################################

fig, ax=plt.subplots()

def data(x,y,z,i):

    x = R*np.cos(Phi)
    y = R*np.sin(Phi)
    z = R-i
    return z

def draw(i):
        colors=('y','b')
        levels = [0.0,0.8]
        contourf(x,y,z,colors=('b', 'b', 'b', 'b', 'b', 'b', 'b','b'))
        for j in np.linspace(0, 6, 8)[::2]:
                Z = data(x,y,z,i-j) 
                contourf(x,y,Z,levels=levels,colors=('y', 'b', 'b', 'b', 'b', 'b', 'b','b'))
        #colorbar()


def animate(i):
        ax.clear()
        draw(i)
        return ax,

draw(0)     


ani = animation.FuncAnimation(fig,animate,np.arange(1,7, .1),interval=5, blit=1)


plt.show()