ลูกศรเคลื่อนไหวใน matplotlib
Sep 16 2020
ฉันเคลื่อนไหวบรรทัดใน 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()
ฉันควรเพิ่ม / เปลี่ยนแปลงอะไรในโค้ดเพื่อให้ได้ลูกศรแทนบรรทัดในผลลัพธ์
คำตอบ
3 Konqui Sep 16 2020 at 08:10
ตอบ
คุณสามารถใช้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()
ภาพเคลื่อนไหว
V.Hunon Sep 16 2020 at 06:41
อาจจะได้ดูที่นี่
คุณสามารถเปลี่ยนฟังก์ชันบรรทัดเป็นฟังก์ชันลูกศรได้ แต่โปรดทราบว่าก่อนอื่นคุณต้องคำนวณจุดสิ้นสุดของลูกศรเนื่องจากตามเอกสารคุณสามารถระบุความยาว dx, dy ได้เท่านั้น โดยใช้ Pythagoras จุดเริ่มต้นจะเป็นx[0], y[0]และdx, dyเป็นปลายทางการแปล
ฉันคิดว่าคุณสามารถแก้ปัญหานี้ได้ด้วยตัวคุณเอง