#14. Создаем анимацию графиков Классы FuncAnimation и ArtistAnimation | Matplotlib уроки
ฝัง
- เผยแพร่เมื่อ 14 ต.ค. 2024
- Узнаете как создавать анимацию, используя интерактивный режим с использованием функций ion() и ioff(), а также с использованием специальных классов FuncAnimation и ArtistAnimation. Дополнительно рассматриваются функции clf(), draw() и метод обработки событий gcf().canvas.flush_events().
Инфо-сайт: proproprogs.ru...
Создание анимации: matplotlib.org...
Matplotlib: matplotlib.org...
Искренне благодарю. Ван надо писать учебник, минимально меняя контент речи.
Большое спасибо за очередной познавательный и полезный курс.
Большое спасибо за курс!
ее я досмотрела этот курс теперь следующий надо смотреть
Пойду попробую сделать море в 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()
Спасибо, очень информативно.
спасибо за информацию
Спасибо, Сергей!
Круть подборка, спасибо.
А как сделать анимацию, если порождающая функция неизвестна, а есть просто набор точек y_i(x_i) в разные моменты времени?
Здравствуйте, а как можно интегрировать Matloplib в GUI? Например в Pyqt6 чтобы в самой программе рисовать график?
а можно сделать интерактив под юпитером? Я что то попытался в лоб, но у меня не удалось ...
Что-то с matplotlib случилось. Анимации из видео не запускаются. Примеры из инета - также. Довольно странно, т.к, если сохранять в gif формате, то график отображается
Решил проблему добавлением строчки в самом начале "%matplotlib qt5" (В jupyter)
Второй курс пройден, я все ближе к ML
В 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". Мне необходимо сделать анимацию движения по спирали, и я уверен, ваш пример поможет в этом разобраться.
@@РомаГусейнов-е6л 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()
видео слишком перегружено. мне нужно только фанканимейшн, но вместо этого я вижу кучу непонятних коментариев, и не могу разобраться
☺Значит надо искать другие источники. Кстати, быстро информацию можно также найти на сайта автора данного курса. Ссылка под видео. Читать намного конечно быстрее, чем смотреть всё видео