使用 plt.ion() 限制 matplotlib 动画

Putting limits on a matplotlib animation with plt.ion()

我正在尝试使用 matplotlib 制作一个 动画 而不使用 FuncAnimation,因为它会导致 HTML 出现问题(ffmpeg)。我现在正在尝试使用更常用于实时情节的 plt.ion()

我在制作动画时没有遇到任何问题,但曲线并没有真正移动,大部分时间移动的是边界。

我尝试了通常的边界,比如设置 plt.xlim(#boundaries) 和 y... 但它没有用。关于如何解决问题的任何线索?

这是我所做的(这只是示例代码,因为我想做的动画是量子波函数,代码已经有点乱了)

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

a = int(input("render level = "))
tmax = float(input("tmax = "))

x = np.linspace(0, 2*np.pi, a)
t = np.linspace(0, tmax, a)

plt.figure()
plt.ion()
plt.xlim([0, 2*np.pi])
plt.ylim([-1.2, 1.2])
plt.plot([], [])

i = 0


while i<a:
    y = np.cos(t[i])*np.sin(x)
    print(t[i])

    plt.clf()
    plt.plot(x, y)
    plt.pause(1/(a*tmax))
    i = i + 1

它不只是绘制边界。之所以给人这样的印象,是因为 y 轴限制一直在自我调整。这是因为你在 while 循环中清除了图形,它忘记了你之前设置的任何内容。

所以你必须在 while 循环中重复轴限制。尝试像这样编写 while 循环:

while i<a:
    y = np.cos(t[i])*np.sin(x)
    print(t[i])

    plt.clf()
    plt.plot(x, y)
    plt.xlim([0, 2*np.pi])
    plt.ylim([-1.2, 1.2])
    plt.title('Time is {}'.format(i))
    plt.pause(1/(a*tmax))

    i = i + 1