つれづれなる備忘録

日々の発見をあるがままに綴る

gnuplotによるグラフ作成10~補間線の追加

 前回のエラーバーの追加に続き、今回はファイルから読み込んだデータプロット間に補間線を追加する方法と、それぞれの補間法の違いについて紹介する。

atatat.hatenablog.com

1. データプロットにラインを追加

 単純にデータプロット同士を結び線を追加する場合は、plot ファイル名 with linespointsとすると、ライン上にデータプロットが描画されるスタイルが適用される。

#X Y, data.txt
0 1
2 5
6 8
8 15
10 22
15 50
plot 'data.txt' with linespoints

実行結果は以下のようになる。

データプロットをラインで結ぶ
データプロットをラインで結ぶ

2. データプロットに補間線を追加

 次にデータプロット同士を滑らかに補間するラインを追加する方法について紹介する。基本的にはplot ファイル名 smooth オプション名とすると各点を滑らかに接続するラインで描画される。なお、元のデータプロットは別途追加する必要がある。オプション名はunique, csplines, acsplines, bezier, sbezierがある。まずsmooth uniqueでプロットする場合

plot 'data.txt'  smooth unique,  'data.txt' with points pt 6

以下が実行結果になる。

uniqueでの補間
uniqueでの補間

uniqueはx座標が同一でy座標が異なる複数のデータ点がある場合、平均値をとってそれらを直線でつなぐ。本例だとy座標が1個だけなので、単に直線でつなぐのと同じになる。

次にsmooth csplinesでプロットする場合

plot 'data.txt'  smooth csplines,  'data.txt' with points pt 6

uniqueよりも各点が滑らな線で結ばれていることがわかる。

csplinesでの補間
csplinesでの補間

csplinesは uniqueを実行してからデータを近似する3次の自然スプラインで補間する。

acsplineの場合は

plot 'data.txt'  smooth acsplines,  'data.txt' with points pt 6

csplineと違って線が必ずしも点に乗らないが曲線あてはめとしてはより自然に見える。

acsplineで補間
acsplineで補間

uniqueの処理を実行してから重み付きの自然スプライン補間をする。 重みはデータファイルの第3列で指定するが、今回は指定していないので等しい重みをもつ自然スプライン補間になっている。

bezierの場合は

plot 'data.txt'  smooth bezier,  'data.txt' with points pt 6

線が必ずしも点に乗らないのはacsplinesと同じだが、曲線の変化量が小さいため線が点からよりはずれている。

bezierでの補間
bezierでの補間

データ点の数と同じ次数のベジエ曲線で補間する。

最後にsbezierの場合は

plot 'data.txt'  smooth sbezier,  'data.txt' with points pt 6

見た目はbezierと同じ。

sbezierでの補間
sbezierでの補間

uniqueと同一の処理を実行してからデータを近似するベジエ曲線を引く。今回はuniqueの処理でデータが変わらないので、bezierと同じになっている。

スプライン補間やベジエ曲線についてはwikipedia:スプライン曲線, wikipedia:ベジェ曲線など参照。またアルゴリズムや計算方法などはgoogle検索などでいくつも解説ページがあるので、気になる場合はそれらを参照するとよい。

個人的にはスプライン補間やベジエ曲線はあまり使ったことがない。実験データとその理論モデルの比較やモデルの係数を算出するために、データとともに近似線を表示することはあるが、たいてい理論モデル自体が直線、指数曲線、対数曲線、2次曲線などが多い。スプラインやベジエはあくまで点同士を滑らかにつなぐ方法であって、工学的に有用な知見を導くものではない。

3. まとめ

 今回はファイルからデータを読み込んだデータプロットに、点同士を滑らかにつなぐ補間線を追加する方法と、各補間方法の違いについて紹介した。