ลูกศรเคลื่อนไหวใน 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เป็นปลายทางการแปล

ฉันคิดว่าคุณสามารถแก้ปัญหานี้ได้ด้วยตัวคุณเอง