【问题标题】:How to animate the vector field?如何为矢量场设置动画?
【发布时间】:2022-11-21 23:45:00
【问题描述】:

作为问题,我如何为一系列图制作动画而不是打印每个单独的图?非常感谢!!!


import numpy as np
from matplotlib import pyplot as plt
from scipy.integrate import odeint
import matplotlib.animation as animation
%matplotlib inline

 # Define vector field
def vField(x,t,a):
    u = 2*x[1]
    v = -x[0] + a*(x[1] - 1/4 * x[1]**2)
    return [u,v]
    
vec = [-10,-5,0,5,10]

for a in vec:
    # Plot vector field
    X, Y = np.mgrid[-2:2:20j,-2:2:20j]
    U, V = vField([X,Y],0,a)

    fig, ax = plt.subplots(figsize=(10, 7))
    ax.quiver(X, Y, U, V)
    plt.pause(0.01)
    
plt.show()

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    你必须在循环之前声明你的fig, ax,并在每个quiver之间清除它。

    事实上,您只想使用一个图形而不是通过迭代创建一个图形。此外,您想清除每次迭代之间的图形,否则所有图都将显示在其他图之上。

    fig, ax = plt.subplots(figsize=(10, 7))
    
    for a in vec:
        # Plot vector field
        X, Y = np.mgrid[-2:2:20j,-2:2:20j]
        U, V = vField([X,Y],0,a)
    
        ax.clear()
        ax.quiver(X, Y, U, V)
        plt.pause(0.01)
    

    请注意,您当前的vec 将看不到任何内容,因为它太短并且暂停是0.01。使用较长的,您会看到平滑的绘图。

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 1970-01-01
      • 2023-03-05
      • 2023-03-30
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多