DOSEIの日記

技術メモ+日常ログ

間引きして出力

大量のベクトル場データをプロットすると、密度が高すぎて何も見えなくなる。そこで、ある程度の間隔で間引くわけだが、間引いたデータを生成するのは面倒くさい。そこで、 Gnuplot の力で解決する。

4カラムで、(整数x座標), (整数y座標), (ベクトルのx成分), (ベクトルのy成分) というデータファイル vect.dat を表示する例。

skip(x, n) = (int(x)%int(n) == 0 ? x : 1/0) # n の倍数以外は無効な値を返す

ns=4 % 間引きの間隔
plot "vect.dat" using (skip($1,ns)):(skip($2,ns)):3:4 with vector

using のパラメタ中に、無効な値 (1/0) が現れると、プロットを飛ばすという仕様による。

なお、 int(x) などとしているのは、 %演算子が整数以外をとらないため。うかつに ($1)%nのように、入力データを与えると(データ上は整数だろうが) can only mod ints という(一見趣旨が分からない)エラーがでる。