使用 Octave 代码在 python 中创建动画

Creating animation in python from Octave code

我是编码新手,一直在尝试根据之前在 Octave 中生成的代码(下图)在 python 中创建动画。到目前为止,除了绘制非动画散点图外,我还没有取得任何成功。任何提示或帮助将不胜感激。

    clear;

    N = 100;  
    NT = 200;

    for i=1:N  
        x(i) = 0;  
        y(i) = 0;  
    end

    plot(x,y,'o');  
    axis([0 20 -10 10]);

    for k = 1 : NT 
        x = x + normrnd(0.1,0.1,1,N);  
        y = y + normrnd(0,0.1,1,N);  
        temp = mod(k,1);  
        if temp == 0  

          plot(x,y,'s');
          axis([0 20 -10 10]);
          drawnow

       end
    end

这是无效的许多尝试之一(如下)。

    import numpy as np
    import matplotlib as plt
    from pylab import *
    from matplotlib import animation
    import random

    n=100
    nt=2000
    m=20
    mu=0
    sigma=0.1
    p=100

    fig = plt.figure()
    ax = plt.axes(xlim=(-10, 10), ylim=(-10, 10))
    scat, = ax.plot([], [])

    # initialization function: plot the background of each frame
    def init():
          x = 0
          y = 0
          return scat,

    # animation function.  This is called sequentially
    def animate(i):
        for k in range (1,nt):
            x =  x+ np.random.normal(mu, sigma, n)
            return scat,

        for i in range (1,nt):
            y =  y+ np.random.normal(mu, sigma, n)
            return scat,

    anim = animation.FuncAnimation(fig, animate, 
    init_func=init,frames=200, interval=20, blit=True)

    plt.show()

您可以使用 Python 的 Octave 制作动画。

对于 python 脚本,我认为其中一个问题是在循环中设置一个 return,因此对一个函数定义动画多次。查看动画文档 https://matplotlib.org/api/animation_api.html 我编辑了您的示例并得到了我认为可能有用的内容:

import numpy as np
import matplotlib.pyplot as plt
from pylab import *
from matplotlib.animation import FuncAnimation
import random

n=100
sigma=0.1
nt=2000

fig, ax = plt.subplots()
xdata, ydata = [0.0], [0.0]
ln, = plt.plot([], [], 'ro', animated=True)

def init():
    ax.set_xlim(  0, 20)
    ax.set_ylim(-10, 10)
    return ln,

def update(frame):
    global xdata
    global ydata
    xdata = xdata + np.random.normal(0.1, sigma, n)
    ydata = ydata + np.random.normal(0.0, sigma, n)
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

您还可以使用 octaves 打印命令生成多个 png 并使用 gimp 生成 gif 或使用 animate 在 LaTeX 中嵌入 png 来制作动画。

最好的, 豪尔赫