Как сделать анимацию в SymPy с помощью Matplotlib (Python) - PullRequest
1 голос
/ 10 апреля 2019

РЕДАКТИРОВАТЬ

Я постараюсь быть более точным (выше детали были удалены, потому что они не нужны):

Я хочу сделать анимациюгде (красный) шар отходит от (0,0) и рисует функцию sin (x).Функция должна быть нарисована синим цветом, а передняя точка должна быть красной (как показано на рисунке выше)

Я нашел способ нарисовать (анимировать) функцию:

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

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'bo')

def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

Теперь моя проблема состоит в том, как сделать начальную точку красной

Мне сказали, что я должен создать пустой список линейных элементов и использовать "append () "метод для добавления новых элементов строки, но я до сих пор не понимаю, как это сделать.

Ссылка https://www.physicsforums.com/threads/how-to-make-an-animation-in-sympy-using-python.969906/

Спасибо за помощь.

1 Ответ

2 голосов
/ 14 апреля 2019

Определенно, есть лучшие способы:

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

points = 50

x = np.linspace(0, 2 * np.pi, points)
y = np.sin(x)

fig, ax = plt.subplots()
ax.set_xlim(-0.3, 2 * np.pi + 0.3)
ax.set_ylim(-1.2, 1.2)

def animate(i):

    if i == 0:
#        fig.clear()
        ax.plot(x[i], y[i], 'ro')
    else:
#        fig.clear()
        ax.plot(x[i-1], y[i-1], 'bo')
        ax.plot(x[i], y[i], 'ro')

anim = FuncAnimation(fig, animate, frames=points, repeat=False, interval=150)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...