使用 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
我正在尝试使用 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