Можно ли изменить скорость во время анимации в matplotlib - PullRequest
1 голос
/ 15 января 2020

Вопрос, вкратце, таков: возможно ли (с помощью инструментов 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) или чего-либо еще, тогда как check_r() проверяет, находится ли r в диапазоне значений, которые должны быть максимизируется.

1 Ответ

0 голосов
/ 15 января 2020

Думаю, ваша идея самая лучшая. И я нашел другой способ, используя анимацию matplotlib. Идея состоит в том, чтобы использовать кадры как медленную задержку, делая одинаковые точки.

В этом примере построена только кривая греха, но к ней будут применены другие функции.

( большая часть кода взята отсюда )

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...