gnuplot : ベクトルプロットでx, y座標にベクトルの中央を合わせてプロットする方法
ベクトルプロットでのベクトルの始点の位置
gnuplotのベクトルプロットでのベクトルの始点の位置、データのx, y座標の位置に来ます。例えばx, y座標が(1, 1)の以下のようなデータの場合、次のグラフのように(1, 1)がベクトルの始点になります。
1 1 1 0
始点がこの位置でいい場合はこれでいいわけですが、場合によっては指定したx, y座標にベクトルの中央が来て欲しい場合もあるでしょう。今回はその方法について解説していきます。
話としては以前の次の記事を下敷きにしています。
今回の話を読んでいて分かり難い場合、まずはこの記事を読んでみて下さい。
x, y座標にベクトルの中央を合わせる
x, y座標にベクトルの中央を合わせるには、ベクトルの始点、つまりx, y座標をずらす操作を行ないます。データ3列目のxdelta、4列目のydeltaはx, y座標とは関係なく、大きさの成分なのでこちらはこのまま用います。ベクトルの中央はxdeltaの1/2、ydeltaの1/2で表されるので、その分をx, y座標から差っ引いて始点をずらします。そうするとusingでは次のように指定すればいいわけです。using ($1-$3/2.0):($2-$4/2.0):3:4
これでプロットすると以下のグラフとなります。
ベクトルの中央がx, y座標(1, 1)になっているのがわかります。
比較のため、始めのグラフと一緒にプロットすれば以下のようになります。
データがベクトルの大きさと角度の場合
データがxdelta, ydeltaではなくベクトルの大きさと角度の場合でも、変換してベクトルの始点の位置を算出してやれば同様に処理出来ます。このへんは以前のベクトルの話と被るので詳しくは説明しませんが、usingの指定は次のようになります。
using ($1-($3*cos($4))/2.0):($2-($3*sin($4))/2.0):($3*cos($4)):($3*sin($4))
(角度がラジアンではなく度の場合は設定の変更が必要)
(以前の記事 : gnuplot : ベクトルプロットでのデータの扱い方について(vectors))
ユーザー関数を用いて
このusingの書き方では読み難い場合、以下のようにユーザー関数を作ればいいでしょう。xdelta(r,a) = r*cos(a)
ydelta(r,a) = r*sin(a)
こうすればusingは以下のように書けるため、それなりに読みやすくなるでしょう。
using ($1-xdelta($3,$4)/2.0):($2-ydelta($3,$4)/2.0):(xdelta($3,$4)):(ydelta($3,$4))
gnuplot関連のブログ記事
コメント
コメントを投稿