#14. Создаем анимацию графиков Классы FuncAnimation и ArtistAnimation | Matplotlib уроки
Вставка
- Опубліковано 27 кві 2021
- Узнаете как создавать анимацию, используя интерактивный режим с использованием функций ion() и ioff(), а также с использованием специальных классов FuncAnimation и ArtistAnimation. Дополнительно рассматриваются функции clf(), draw() и метод обработки событий gcf().canvas.flush_events().
Инфо-сайт: proproprogs.ru/modules/
Создание анимации: matplotlib.org/stable/api/ani...
Matplotlib: matplotlib.org/stable/content...
Большое спасибо за курс!
Спасибо, очень информативно.
Большое спасибо за очередной познавательный и полезный курс.
Круть подборка, спасибо.
Пойду попробую сделать море в 3D)))
МОРЕ
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
from mpl_toolkits.mplot3d import Axes3D
# Prepare meshgrid
x = np.linspace(-2 * np.pi, 2 * np.pi, 100)
y = np.linspace(-2 * np.pi, 2 * np.pi, 100)
xgrid, ygrid = np.meshgrid(x, y)
# Set up the figure
fig = plt.figure(figsize=(10, 6))
ax_3d = fig.add_subplot(111, projection='3d')
ax_3d.set_zlim(-2, 2) # Limit the z-axis to keep the scale consistent
# Initialize random wave centers
num_waves = 5
wave_centers = np.random.rand(num_waves, 2) * 4 * np.pi - 2 * np.pi # Random centers
# Create animation frames
frames = []
for frame in range(50): # Number of frames in the animation
zgrid = np.zeros_like(xgrid)
for center in wave_centers:
# Each wave's contribution is weaker the further it is from the center
distance = np.sqrt((xgrid - center[0])**2 + (ygrid - center[1])**2)
zgrid += np.sin(distance - 0.1 * frame) / (1 + distance / np.pi)
# Create the surface plot for this frame
line = ax_3d.plot_surface(xgrid, ygrid, zgrid, cmap='ocean')
ax_3d.set_zlim(-2, 2) # Ensure the z-axis limit remains consistent
frames.append([line])
# Generate the animation
animation = ArtistAnimation(fig, frames, interval=100, blit=False, repeat=True)
plt.show()
ее я досмотрела этот курс теперь следующий надо смотреть
спасибо за информацию
Спасибо, Сергей!
Здравствуйте, а как можно интегрировать Matloplib в GUI? Например в Pyqt6 чтобы в самой программе рисовать график?
А как сделать анимацию, если порождающая функция неизвестна, а есть просто набор точек y_i(x_i) в разные моменты времени?
Второй курс пройден, я все ближе к ML
А как создать анимацию полярной функции по типу эпитрохоиды?
а можно сделать интерактив под юпитером? Я что то попытался в лоб, но у меня не удалось ...
Что-то с matplotlib случилось. Анимации из видео не запускаются. Примеры из инета - также. Довольно странно, т.к, если сохранять в gif формате, то график отображается
Решил проблему добавлением строчки в самом начале "%matplotlib qt5" (В jupyter)
спасибо
В GoogleColab анимацию наверное нельзя увидеть? Код ваш туда загружаю, при запуске программы видно, что цикл работает, так как слева стрелка бегает по коду, а потом просто в конце одна картинка появляется и всё.
да, там вроде ограниченный функционал
@@selfedu_rus 👌
Спасибо! А можно как-то сохранять в GIF или подобный формат?
animation = animation.FuncAnimation( ... )
animation.save('моя анимация.gif',
writer='imagemagick',
fps=30)
@@selfedu_rus Спасибо!
Здравствуйте! А является ли возможным сделать анимацию движения примитива по графику? Скажем, чтобы по контуру графика параболы двигался красный кружок. Если возможно, можете, пожалуйста, сказать в каком направлении думать?)
делал прям такой пример, вот здесь: github.com/selfedu-rus/python-algorithms файл grad1_1.py
@@selfedu_rus большое спасибо!
@@selfedu_rus не сочтите за наглость, а есть ли у вас ещё примеры движения примитива по графику. Ваш предыдущий пример помог, но лучше понять устройство смогу увидев ещё пример. В частности, в файле grad1_1.py в функции df(x) не совсем понял откуда берётся выражение "2*x -5". Мне необходимо сделать анимацию движения по спирали, и я уверен, ваш пример поможет в этом разобраться.
@@user-ul3xx6tq1s 2x - 5 - это производная функции x^2 - 5x + 5. Пример похожий есть grad2.py для двумерного случая. Больше вроде никаких.
Как по мне, от FuncAnimation только сложнее стало)
Добрый День! Скажите, пож-та, на этом обучающее видео по Matplotlib завершён?
да
@@selfedu_rus ок, спасибо за ответ!
Я очень надеюсь, что ты не удалишь свои ролики
А что делать если не воспроизводится анимация?
вот выше кто-то тоже задавался этим вопросом и ее решил:
Что-то с matplotlib случилось. Анимации из видео не запускаются. Примеры из инета - также. Довольно странно, т.к, если сохранять в gif формате, то график отображается.
@cantwaitforit
@cantwaitforit
11 месяцев назад (изменено)
Решил проблему добавлением строчки в самом начале "%matplotlib qt5" (В jupyter)
все сделал по видео, все модули загрузил, и выскакиевает все равно кончена ошибка, сука, весь день сижу график не могу сделать.
File "grg.py", line 21, in
animation = FuncAnimation(
TypeError: __init__() missing 1 required positional argument: 'func'
в другом варианте, втором, где график должен идти, все без ошибок, но он тупо стоит, все по видео, не единой ошибки
Пишет, что пропущен обязательный аргумент, т.е. там где в коде: animation = FuncAnimation(fig, func = update_cos ..... т.е пропущена строчка func = update_cos
@@user-zs2pg6lw8d спасибо
Вот рабочий код:
import matplotlib.pyplot as plt
import matplotlib.animation as an
import numpy as np
def update_cos (frame, line, x):
pass
line.set_ydata(np.cos(x+frame))
return[line]
fig, ax = plt.subplots()
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
y = np.cos(x)
line, = ax.plot(x, y)
phasa = np.arange(0, 4*np.pi, 0.1)
animation = an.FuncAnimation(
fig,
func=update_cos,
frames=phasa,
fargs=(line, x),
interval= 30,
blit= True,
repeat=False)
plt.show()
видео слишком перегружено. мне нужно только фанканимейшн, но вместо этого я вижу кучу непонятних коментариев, и не могу разобраться
☺Значит надо искать другие источники. Кстати, быстро информацию можно также найти на сайта автора данного курса. Ссылка под видео. Читать намного конечно быстрее, чем смотреть всё видео