Есть возможность, чтобы программа рисовала положение точки в разные моменты времени одно за другим?
Чтобы было моделирование, надо не этот график показывать, а чтобы программа рисовала положение точки в разные моменты времени одно за другим
код:
from numpy import linspace
import matplotlib.pyplot as plt
v0 = 5
g = 9.81
t = linspace(0, 1, 1001)
y = v0 * t - 0.5 * g * t **2
plt.plot(t,y)
plt.xlabel('t(s)')
plt.ylabel('y(m)')
plt.show()
Ответы (2 шт):
Анимирование графика можно делать по-разному. Самый "ломовой" способ - последовательная отрисовка ваших графиков, например вот так:
v0 = 5
g = 9.81
t = linspace(0, 1, 1001)
y = v0 * t - 0.5 * g * t **2
x=[]
z=[]
fig,ax=plt.subplots()
for i in range(len(y)):
ax.cla()
ax.axis([0, 1, 0, 1.5])
x.append(t[i])
z.append(y[i])
ax.plot(x,z)
plt.pause(0.01)
Но если делать все "по-взрослому", то советую смотреть в сторону применения функции FuncAnimation из модуля matplotlib.animation.
В matplotlib есть поддержка анимации.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
v0 = 5.0
g = 9.81
t = np.linspace(0, 1, 1001)
y = v0 * t - 0.5 * g * t **2
# Готовим чертёж
fig, ax = plt.subplots()
ax.set_xlim(-0.1,max(t)*1.05)
ax.set_ylim(-0.1, max(y)*1.05)
ax.set_xlabel('t(s)')
ax.set_ylabel('y(m)')
ax.grid()
# Рисуем анимацию
# Тип графика - точки.
# Первый кадр - точка в начальной позиции
scatter = ax.scatter(t[0], y[0])
# Возвращаем набор графических объектов для очередного кадра
def draw_frame(frame_num):
# обновляем положение точки
scatter.set_offsets((t[frame_num], y[frame_num]))
# возвращаем список объектов кадра
return [scatter]
ani = animation.FuncAnimation(
fig, # объект Figure, на котором рисуем
draw_frame, # функция рисования кадра
interval=3, # 3 мс между кадрами
frames=len(t), # число кадров
blit=True # перерисовывать только изменившуюся часть кадра
)
plt.show()
Если хотите, чтобы рисовало быстрее, установите меньше значение interval
Если же вам нужно просто график в виде последовательности точек, не соединенных прямыми, то в вашем коде надо заменить plt.plot на plt.scatter: plt.scatter(t,y)
Но так как у вас точки идут очень густо, то получится обыкновенный график, разве что жирной линией нарисованный.