Matplotlib暂停,保持最后一次迭代

2024-03-28 11:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在matplotlib中有一个动画循环,我想冻结动画的最后一次迭代。我正在使用带有条件的pause函数来检查上一次迭代。但是,在最后一次迭代中,显示的是前一帧,而不是最后一帧。在

下面是一个例子:

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1,1)
x = np.linspace(0, 6.28, 401)

freqs = np.arange(5)

for f in freqs:
    print f

    ax.plot(x, np.sin(f*x))   
    ax.set_title('$\sin(%d x)$'%f)

    if f < freqs[-1]:
        plt.pause(1)
        ax.cla()
    else:
        print "hi"
        plt.show() # Fails: shows frame with `f==3`.

打印:

^{pr2}$

但是,最后一帧(带有f==4)从未显示。动画冻结标题为“sin(3x)”,以及f==3的相应绘图数据,而不是4。在

有没有一种“适当”的方法来保持最后一帧?例如,plt.pause(10000)可以工作,但看起来像是黑客。在


Tags: 函数importnumpymatplotlibasnp动画plt
1条回答
网友
1楼 · 发布于 2024-03-28 11:20:13

我总是觉得先设置好情节,然后画出来,然后开始动画片。在

import numpy as np
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1,1)
x = np.linspace(0, 6.28, 401)
freqs = np.arange(5)
line, = ax.plot([],[])
ax.set_xlim([x[0], x[-1]])   
ax.set_ylim([-1, 1])   
ax.set_title('$\sin(x)$')
fig.canvas.draw() 

for f in freqs:
    print f

    line.set_data(x, np.sin(f*x))   
    ax.set_title('$\sin(%d x)$'%f)
    fig.canvas.draw()

    if f < freqs[-1]:
        plt.pause(1)
    else:
        print "hi"
plt.show()

相关问题 更多 >