2016-03-21 10 views
0

私は複数のファイルを持っていますが、それぞれが同じ数の行を持っています。ファイルは、 "a100.txt"、 "a200.txt"、 "a300.txt" ...のように "something_integer.txt"という名前が付けられています(整数は100で常に同じです)。すべての行は、他のファイルの同じ行と時間的に接続されていますが、他の行とは接続されていません。Gnuplot:数字とファイルからのプロット

すべてのファイルのすべての行1を1つのグラフにプロットしたい、すべてのファイルのすべての行2を他の単一のグラフに(ただし前のグラフに重ねて)どうすればgnuplotでこれを行うことができますか?

私はforループを使用する必要があることを知っています。私は(ちょうど行1と行2のため)のようなもので考えていた:

do for [i=100:5000:100] { 
    plot sprintf('something_%d.txt',i) every 1::1::1 using ¿¿¿¿¿????:5, 
     sprintf('something_%d.txt',i) every 1::2::2 using ¿¿¿¿¿????:5 
} 

はなく、疑問が生じ:私は入れ

  1. "¿¿¿¿¿????"私は、列5の値ではなく、列iの値ではなく値xとして値yをプロットしたいからです。どうやってそれができる?
  2. ループを続けるたびにプロット命令がある場合は、以前のポイントが消去されますか?彼らは私が望むように接続されますか?

答えて

0

最初の質問は簡単です:あなたは私が正しく理解していれば、1秒間、あなたがplot内のループを移動する必要がカッコusing (i):5

を使用する必要があります。

plot for [i=100:5000:100] \ 
    sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \ 
    sprintf('something_%d.txt',i) every 1::2::2 using (i):5 

ですこれはあなたが望んだものですか?

+0

正確ではありません。これは最初は大丈夫ですが、1行目のすべてのポイントと1行目と2行目のすべてのポイントを別のラインで接続したいと思います。これにより、すべてのポイントは「データのセリー」のようになります。 –

0

私はgnuplotの中でこれをやろうとしているのは残酷です(しかし、私は過剰殺しのソリューションが好きです!)。 awkなどを使って、bashでいくつかの前処理を行う方が良いでしょう。しかし、あなたのgnuplotコードの中から引き続きawkコマンドを使用することはできます。これは、あなたが欲しいものを行います。file(1)が無い行選択するように

loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) } 

file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done" 

plot file(1) w l, file(2) w l 

nは、あなたが選択している行です。すべてのファイルで1、file(2)は行番号を選択します。すべてのファイルで2など。

関連する問題