6

比較的高いレートでサンプリングされたいくつかの実験データのグラフをプロットしたいと思いますが、下のグラフに示すように、等弧長間隔で配置されたマーカーを使用して滑らかな曲線を近似します。

円弧の長さが等しいマーカーを使用したグラフ

プロットする引数については知っていmarkeveryますが、それではプロットの右側にマーカーが集まり、おそらく左側にかなりの数のマーカーが表示されます。解は、x 軸と y 軸のスケールに依存しない必要があります。追加のモジュールをインストールすることにオープンですが、それは python+matplotlib ソリューションである必要があります。

4

2 に答える 2

2

比較的良い解決策をまとめたと思います。唯一の問題は、最終プロットの縦横比に関する情報も使用する方法でデータ比を考慮に入れることです。これを行うための信頼できる方法は見つかりませんでしたが、この関数はデータ比率を受け入れるため、出力が正しく見えるまで再生できます。

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

使用例 (これは iPython の pylab モードに適しています):

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')

結果:

等間隔のマーカーを示すサンプル出力

于 2013-07-02T06:07:50.417 に答える