私は別のアプローチを取ります。まず、導関数の符号を見ずにジャンプポイントを決定します。おそらく、動きが上下したり、周期性があったりする可能性があるためです。私はそれらの点を最大の導関数で見ていきます。
第二に、プロットラインを中断するための洗練されたアプローチは、ジャンプごとに1つの値をマスクすることです。その後、matplotlibは自動的にセグメントを作成します。私のコードは次のとおりです。
import pylab as plt
import numpy as np
xs = np.linspace(0., 100., 1000.)
data = (xs*0.03 + np.sin(xs) * 0.1) % 1
plt.subplot(2,1,1)
plt.plot(xs, data, "r-")
#Make a masked array with jump points masked
abs_d_data = np.abs(np.diff(data))
mask = np.hstack([ abs_d_data > abs_d_data.mean()+3*abs_d_data.std(), [False]])
masked_data = np.ma.MaskedArray(data, mask)
plt.subplot(2,1,2)
plt.plot(xs, masked_data, "b-")
plt.show()
そして結果として私たちに与えます:
もちろん、不利な点は、ブレークごとに1ポイントを失うことです。ただし、サンプリングレートを使用すると、これをより単純なコードと交換できると思います。