Python 是否可以在matplotlib中的动画期间更改速度

Python 是否可以在matplotlib中的动画期间更改速度,python,matplotlib,animation,Python,Matplotlib,Animation,简言之,问题是(使用matplotlib.animation工具或python的其他模块)是否可以在动画的某些帧上获得慢动作 某些上下文: 我有一个matplotlib动画图,其中我改变了一个变量,并在另外两个变量上显示了一个等高线图。我的想法是当我接近函数的最大值时,减慢动画的速度,这样我可以更清楚地定位动画,而在没有太多兴趣的地方,则加速动画 目前,我最好的办法是将最接近最大值的帧翻倍,但有人能有更好的主意吗 谢谢大家 代码段: import matplotlib.pyplot as pl

简言之,问题是(使用matplotlib.animation工具或python的其他模块)是否可以在动画的某些帧上获得慢动作

某些上下文:

我有一个matplotlib动画图,其中我改变了一个变量,并在另外两个变量上显示了一个等高线图。我的想法是当我接近函数的最大值时,减慢动画的速度,这样我可以更清楚地定位动画,而在没有太多兴趣的地方,则加速动画

目前,我最好的办法是将最接近最大值的帧翻倍,但有人能有更好的主意吗

谢谢大家


代码段:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
X = np.linspace(1,10, 100)
Y = np.linspace(1,10, 100)
R = np.linspace(-1, 1, 100)
ims = []

for r in R:
    z = func(X, Y, r)
    im = plt.imshow(z)
    ims.append(im)
    if check_r(r):
        ims.append(im)

其中
func()
是一个函数,它返回一个
(len(X),len(Y))
数组,该数组依赖于
r
(例如
Z[i,j]=X[i]**r*Y[j]**(1-r)
,而
检查\r()
测试
r
是否在需要最大化的值范围内。

我认为你的想法是最好的。我还发现了另一种使用matplotlib动画的方法。这种方法是通过制作相同的点,将帧作为慢延迟使用

在本例中,仅绘制正弦曲线,但它将应用于其他函数

()


我认为你的想法是最好的。我还发现了另一种使用matplotlib动画的方法。这个想法是通过制作相同的点,使用帧作为慢延迟

在本例中,仅绘制正弦曲线,但它将应用于其他函数

()


谢谢,但我认为这是我找到的同一个解决方案,除了用这种方法,你会对每一帧重复计算,而在我的例子中,计算只进行一次。如果计算比简单的
sin
函数更昂贵,这可能是你的解决方案的一个问题!谢谢,但我认为这是一样的我找到的解决方案,除了以这种方式重复每帧的计算,而在我的情况下,计算只进行一次。如果计算比简单的
sin
函数更昂贵,这可能是解决方案的问题!
import numpy as np
import matplotlib.animation as animation
import matplotlib.pylab as plt
import pandas as pd

TWOPI = 2*np.pi
fig, ax = plt.subplots()

# making frames "delay"
frames = np.arange(0.0, TWOPI, 0.1)
frames = np.insert(frames, 17, [1.7]*5)
frames = np.insert(frames, 16, [1.6]*5)
frames = np.insert(frames, 15, [1.5]*5)

t = np.arange(0.0, TWOPI, 0.001)
s = np.sin(t)
l = plt.plot(t, s)

ax = plt.axis([0,TWOPI,-1,1])

redDot, = plt.plot([0], [np.sin(0)], 'ro')

def animate(i):
    redDot.set_data(i, np.sin(i))
    return redDot,

myAnimation = animation.FuncAnimation(fig, animate, frames=frames, 
                                      interval=100, blit=True, repeat=True)