Анимировать стрелки в matplotlib
Я анимировал строку в matploltib, вывод кода выглядит так:
Но я хочу, чтобы вместо этой строки код должен был нарисовать стрелку (т.е. стрелку в конце строки), вот фрагмент кода:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots(figsize=(12, 8))
ax.set(xlim=(0, 104), ylim=(0, 68))
x_start, y_start = (50, 35)
x_end, y_end = (90, 45)
x = np.linspace(x_start, x_end, 50)
y = np.linspace(y_start, y_end, 50)
line, = ax.plot(x, y)
def animate(i):
line.set_data(x[:i], y[:i])
return line,
ani = animation.FuncAnimation(
fig, animate, interval=20, blit=True, save_count=50)
plt.show()
Что мне нужно добавить / изменить в коде, чтобы в выводе появилась стрелка вместо строки?
Ответы
Ответ
Вы можете использовать ax.arrowдля построения стрелки.
Обратите внимание, что вы должны очищать график ax.cla()и настраивать пределы осей ax.set()на каждой итерации.
Код
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots(figsize=(12, 8))
ax.set(xlim=(0, 104), ylim=(0, 68))
x_start, y_start = (50, 35)
x_end, y_end = (90, 45)
N = 50
x = np.linspace(x_start, x_end, N)
y = np.linspace(y_start, y_end, N)
def animate(i):
ax.cla()
ax.arrow(x_start, y_start,
x[i] - x_start, y[i] - y_start,
head_width = 2, head_length = 2, fc = 'black', ec = 'black')
ax.set(xlim = (0, 104), ylim = (0, 68))
ani = animation.FuncAnimation(fig, animate, interval=20, frames=N, blit=False, save_count=50)
plt.show()
Анимация
Может посмотреть здесь
Вы можете просто изменить функцию линии на функцию стрелки. Но обратите внимание, что сначала вам нужно будет вычислить конечную точку стрелки, поскольку в соответствии с документами вы можете указать только длину dx, dy. Используя Пифагор, начальная точка будет x[0], y[0]и dx, dyэто переводится конечная точка.
Думаю, теперь вы можете решить это самостоятельно.