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


20

このように、毎日に関連付けられた値を持っています:

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の例


問題の写真を次に示します。i.stack.imgur.com / aYH4N.png(何らかの理由で投稿に画像を追加できません)。丸で囲んだ領域を空白のままにしておきたい。
アンナ

スーパーユーザーへようこそ。あなたはまだこのサイトで十分な評判を集めていないのでできません。私の変更に不満がある場合は、もちろん変更を元に戻す(または再度編集する)ことができます。
バーン

回答:


16

データがない場所に空のレコード(空行)を入れます。ドキュメントから:

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


1
おかげで、これはすべてのシリーズの不連続点で機能します。あるシリーズで不連続性があり、他のシリーズではない場合はどうですか?
アンナ

8
値の代わりにダッシュを付けることで機能しました。
アンナ

私にとっては、2つのスペース文字が含まれる行でした。
3kstc

9

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

次に、ラインをプロットする場合

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

Gnuplotはギャップを残します。


2

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

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

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

値が0/0の場合、gnuplotはそのポイントを無視します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.