web-dev-qa-db-ja.com

gnuplotで、線でプロットするが欠落したデータポイントをスキップする方法は?

そのようなものとして、毎日に関連付けられた値を持っています:

120530    70.1
120531    69.0
120601    69.2
120602    69.5
# and so on for 200 lines

このデータを折れ線でgnuplotにプロットすると、データポイントは適切に接続されます。残念ながら、1週間を超える場所ではデータポイントが失われる可能性があります。 gnuplotはこれらの間隔で長い線を引きます。どうすればgnuplotが連続した日にのみポイントを接続するようにできますか?

データの前処理を必要とするソリューションは、スクリプトで既に平滑化しているので問題ありません。

これが私が使うものです:

set xdata time
set timefmt "%y%m%d"
plot "vikt_ma.txt" using 1:2 with lines title "first line", \\
     ""            using 1:3 with lines title "second line"

例: gnuplot example

20
Anna

データがない場所に空のレコード(空白行)を挿入します。 docs から:

単一の空白レコードは、プロットの不連続を示します。空白のレコードで区切られたポイントを結ぶ線はありません(線のスタイルでプロットされている場合)。

16
Keith

欠落データポイントの値として数値ではない任意の文字列を使用するか、set datafile missingコマンドを使用して欠落データ文字列を明示的に指定できます。

次に、

plot "vikt_ma.txt" using 1:($2) with lines title "first line"

その場合、Gnuplotはギャップを残します。

10
Roland W

また、x値間の距離がしきい値を超えたときにギャップを自動的に作成するために、次のようなこともできます。

previous=1
current=1
shift(x) = (previous=current, current=x)
yornothing(x,y) = ( shift(x), abs(x-previous)<7200?y:sqrt(0/0))

plot "file.dat" using 1:(yornothing($1,$2)) with lines

「前」と「現在」の初期値、およびしきい値(上記の例では「7200」)を調整する必要があります。

関数「yornothing」は、関数「shift」を使用して、xの1つ前の値を格納します。 yornothingが呼び出されるたびに、xとその前の値との差の絶対値がしきい値を超えているかどうかに応じて、yの値または "0/0"が返されます。

値0/0はgnuplotにその点を無視するように伝えます。

2
Bryan Wright