You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何截断位移绘图前段并将指定交点设为坐标原点(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]进行处理:

  1. 平移到原点:找到关键时间点对应的位移值,将整个曲线减去这个值,让该点变为(0,0)
  2. 截断前半段:只保留关键时间点及之后的曲线部分

为了避免索引对应不上的问题,我们用更鲁棒的方式找到位移曲线中最接近关键时间点的位置:

# 找到位移曲线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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:07:40