如何在Python中制作不连续函数动画并消除连接线段?
解决动画中不连续点的连接线段问题
问题根源在于你的速度数组v在t=1处存在跳变,但数组内是连续的数值(从-10直接切换为0的相邻元素),Matplotlib会默认将这些点连接起来。要消除这条多余线段,只需在不连续位置插入NaN——Matplotlib不会绘制包含NaN的线段。
修改后的代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation t = np.linspace(0, 2, 100) v = -10*t # 定位速度首次降到-10及以下的索引(跳变发生位置) jump_idx = np.argmax(v <= -10) # 在跳变处插入NaN,断开线段 if jump_idx < len(v): t = np.insert(t, jump_idx, np.nan) v = np.insert(v, jump_idx, np.nan) fig = plt.figure() plt.axis([0, 3, -12, 12]) av, = plt.plot([],[]) def animate(frame): av.set_data(t[:frame],v[:frame]) return av, ani = FuncAnimation(fig, animate, frames=len(t)) plt.show()
核心逻辑说明
- 用
np.argmax(v <= -10)精准定位速度跳变的起始索引; - 在该位置插入
NaN后,动画绘制到此处时会自动断开线段,不会将之前的负速度点与后续的0速度点错误连接; - 若需要严格在
t=1处断开,也可直接定位t数组中接近1的索引来插入NaN。
内容的提问来源于stack exchange,提问作者bored af
相关产品推荐
相关产品推荐

