如何截断位移绘图前段并将指定交点设为坐标原点(0,0)?
解决方案:调整位移曲线的原点与截断
我来帮你搞定这两个需求,直接在你的现有代码基础上修改就行,步骤很清晰:
步骤1:定位关键时间点(橙色曲线全局最小值)
首先我们需要明确第一条竖线对应的核心时间点——也就是橙色曲线(CSV第9列)的全局最小值对应的采样时间,先把这个关键信息提取出来:
# 获取橙色曲线(第9列,脚趾测力)的全局最小值索引和对应时间 toe_force = strideData.iloc[:,9] idx_min_toe = toe_force.idxmin() min_time = idx_min_toe * scale_factor # 转换为时间值
步骤2:处理位移曲线(平移原点+截断)
接下来针对两次积分得到的位移曲线s和对应的x轴x_values[:-2]进行处理:
- 平移到原点:找到关键时间点对应的位移值,将整个曲线减去这个值,让该点变为(0,0)
- 截断前半段:只保留关键时间点及之后的曲线部分
为了避免索引对应不上的问题,我们用更鲁棒的方式找到位移曲线中最接近关键时间点的位置:
# 找到位移曲线x轴中最接近min_time的索引(防止采样索引偏差) closest_idx = np.argmin(np.abs(x_values[:-2] - min_time)) # 需求1:将交点设为坐标原点,平移曲线 displacement_at_min = s[closest_idx] s_shifted = s - displacement_at_min # 需求2:截断交点之前的曲线段 s_truncated = s_shifted[closest_idx:] x_truncated = x_values[:-2][closest_idx:]
步骤3:替换原绘图代码
把你原来绘制位移曲线的代码:
plt.plot(x_values[:-2],s)
替换成处理后的曲线绘图:
plt.plot(x_truncated, s_truncated, color='purple', label='Adjusted Displacement') plt.xlabel('Time (s)') plt.ylabel('Displacement') plt.legend()
完整整合后的代码片段
把这些代码放在你两次积分的#%% Integration of the velocity块之后就行,完整的这部分代码如下:
#%% Integration of the velocity s = inte.cumtrapz(velocity, x_values[:-1]) # --- 新增的位移曲线处理代码 --- # 获取橙色曲线(第9列,脚趾测力)的全局最小值索引和对应时间 toe_force = strideData.iloc[:,9] idx_min_toe = toe_force.idxmin() min_time = idx_min_toe * scale_factor # 找到位移曲线x轴中最接近min_time的索引 closest_idx = np.argmin(np.abs(x_values[:-2] - min_time)) # 平移曲线至原点 displacement_at_min = s[closest_idx] s_shifted = s - displacement_at_min # 截断前半段曲线 s_truncated = s_shifted[closest_idx:] x_truncated = x_values[:-2][closest_idx:] # --- 处理结束 --- # 绘制处理后的位移曲线 plt.plot(x_truncated, s_truncated, color='purple')
这样就能完美实现你要的两个效果:把第一条竖线和位移曲线的交点设为原点,并且截断之前的曲线段啦!
内容的提问来源于stack exchange,提问作者mathflower
相关产品推荐
相关产品推荐

