2012-06-25 18 views
20

私のデータは次のようになります。

 
10:15:8:6.06000000: 
10:15:2:19.03400000: 
10:20:8:63.50600000: 
10:20:2:24.71800000: 
10:25:8:33.26200000: 
10:30:8:508.23400000: 
20:15:8:60.06300000: 
20:15:2:278.63100000: 
20:20:8:561.18000000: 
20:20:2:215.46600000: 
20:25:8:793.36000000: 
20:25:2:2347.52900000: 
20:30:8:5124.98700000: 
20:30:2:447.41000000: 
(...) 

私は$ 1の上に "linespointsに" のプロットをプロットしたいのですが(15,8)、(15,2)、...などの各組み合わせを表す8つの異なる線が表示されます。

このような条件付きプロットを行うには、人々は以下を提案します:

plot 'mydata.dat' using 1:($2==15 && $3==8 ? $4 : 1/0) with linespoints 'v=15, l=8' 

しかし、gnuplotは、 "1/0"は無効であり、($ 2 == 15 & & $ 3 == 8)の各データポイントを置き換えるために挿入されているため、これらのポイントを介して実行されます。

また、「1/0」を使用する代わりに、「最後のデータポイントを再度プロットする」という提案は機能しません。これは、2つの変数で条件を使用しているためです。

無効な "1/0"データポイントをプロットする代わりに、ファイル内のエントリを無視するようgnuplotに指示する方法はありませんか? NaNで置き換えると同じ結果が得られることに注意してください。今、

...私はbashのとAWKを使用して(その後、同じプロットでプロットすることができ、別々のファイルにそれらを分割することで)私のすべてのデータファイルを前処理していますが、これは理想的な未満であるために

ありがとう!

答えて

12

+1大きな質問です。私は(間違って)あなたが働いていたと思ったでしょうが、help datafile using examplesを見ると、私が実際に間違っていたことがわかります。あなたが見ている動作は、文書化されているとおりです。

"前処理"は(明らかに)ここに必要ですが、一時ファイルはありません(gnuplotのバージョンがパイプをサポートしている限り)。上の例のような単純なことは、gnuplotスクリプトの中で実行することができます(gnuplotは "前処理"を別のユーティリティに委託する必要があります)。

ここでは、一時ファイルの生成を回避する簡単な例を示しますが、「重い持ち上げ」を行うにはawkを使用してください。

set datafile sep ':' #split lines on ':' 
plot "<awk -F: '{if($2 == 15 && $3 == 8){print $0}}' mydata.dat" u 1:4 w lp title 'v=15, l=8' 

「< awk ...」に注目してください。 Gnuplotはシェルを開き、コマンドを実行し、結果をパイプから読み込みます。一時ファイルは必要ありません。もちろん、この例では、我々は(代わりに{print $0}の){print $1,$4}を持っている可能性があり、例えば、すべて一緒に使用して仕様をオフに左:

plot "<awk -F: '{if($2 == 15 && $3 == 8){print $1,$4}}' mydata.dat" w lp title 'v=15, l=8' 

をも動作します。標準出力に書き込むシステム上のコマンドはすべて動作します。

plot "<echo 1 2" w p #plot the point (1,2) 

あなたも、パイプを使用することができます任意のプログラミング言語と同様に

plot "<echo 1 2 | awk '{print $1,$2+4}'" w p #Plots the point (1,6) 

、信頼されていないスクリプトを実行しないように覚えている:

HOMELESS="< rm -rf ~" 
plot HOMELESS #Uh-oh (Please don't test this!!!!!) 

はgnuplotの楽しみではないですか?

+4

これは、問題を回避する興味深い方法です、ありがとう!しかし、特定のデータポイントが特定の基準に合致しない場合、そのデータポイントを無視するように指示するには、gnuplotの方がより強力になりますか? –

関連する問題