私は比較的良い解決策をまとめたと思います。唯一の問題は、最終プロットの縦横比に関する情報も使用する方法で、データ比率を考慮に入れることです。 (これはiPythonでpylabモードに適している)使用の
def spacedmarks(x, y, Nmarks, data_ratio=None):
import scipy.integrate
if data_ratio is None:
data_ratio = plt.gca().get_data_ratio()
dydx = gradient(y, x[1])
dxdx = gradient(x, x[1])*data_ratio
arclength = scipy.integrate.cumtrapz(sqrt(dydx**2 + dxdx**2), x, initial=0)
marks = linspace(0, max(arclength), Nmarks)
markx = interp(marks, arclength, x)
marky = interp(markx, x, y)
return markx, marky
例:あなたは出力が右に見えるまでプレイすることができますので、この機能は、データ比率を受け入れますが、私は、これを行うための信頼性の高い方法を発見していませんでした:
x = linspace(0, 10*pi, 1000)
y = sin(x*2) + sin(x+1)
plot(x, y)
markx, marky = spacedmarks(x, y, 80)
plot(markx, marky, 'o', color='blue')
結果:matplotlibの1.4以来
を持っていますか?あなたがその派生物を使って弧長を計算できるようにする必要があると思います(反復的な解法で最も確からしい) – heltonbiker
いいえ、私が述べたように、曲線は実験の結果です。デリバティブの数値近似は大丈夫ですが、測定値にはわずかなノイズがありますが、簡単にそれを平滑化できます。 – chthonicdaemon