複数のファイルからデータを繰り返し取得し、gnuplotの同じグラフにプロットする方法はありますか。 data1.txt、data2.txt ...... data1000.txtなどのファイルがあるとします。各列の数は同じです。今、私は次のようなものを書くことができます-
plot "data1.txt" using 1:2 title "Flow 1", \
"data2.txt" using 1:2 title "Flow 2", \
.
.
.
"data1000.txt" using 1:2 title "Flow 6"
しかし、これは本当に不便です。 gnuplotのplot部分をループする方法があるかどうか疑問に思っていました。
確かにあります(gnuplot 4.4以降):
plot for [i=1:1000] 'data'.i.'.txt' using 1:2 title 'Flow '.i
変数i
は変数または文字列として解釈できるため、次のようなことができます。
plot for [i=1:1000] 'data'.i.'.txt' using 1:($2+i) title 'Flow '.i
互いにオフセットしたい場合。
詳細については、gnuplotコマンドラインで「help iteration
」と入力してください。
また、do for
構文に関する@DarioPの回答も必ずご覧ください。これにより、従来のfor
ループにより近いものが得られます。
Gnuplot 4.6以降は非常に強力なので、do { ... }
コマンドもご覧ください。
do for [t=0:50] {
outfile = sprintf('animation/bessel%03.0f.png',t)
set output outfile
splot u*sin(v),u*cos(v),bessel(u,t/50.0) w pm3d ls 1
}
スクリプトall.pがあります
set ...
...
list=system('ls -1B *.dat')
plot for [file in list] file w l u 1:2 t file
ここで、最後の2行はリテラルであり、ヒューリスティックではありません。それから私は走る
$ gnuplot -p all.p
*.dat
を使用しているファイルタイプに変更するか、ファイルタイプを追加します。
次のステップ:〜/ .bashrcにこの行を追加します
alias p='gnuplot -p ~/./all.p'
そして、ファイルをall.p
をホームディレクトリと出来上がりに入れます。 pと入力して、任意のディレクトリのすべてのファイルをプロットできます。
EDIT動作しなかったため、コマンドを変更しました。以前は、list(i)=Word(system(ls -1B *.dat),i)
が含まれていました。
グラフにプロットする離散列がある場合は、次を使用します
do for [indx in "2 3 7 8"] {
column = indx + 0
plot ifile using 1:column ;
}
任意のディレクトリから作業しながら、ワイルドカードを使用して、多くの場合異なるディレクトリに配置された複数のファイルをプロットしたかった。私が見つけた解決策は、~/.bashrc
で次の関数を作成することでした
plo () {
local arg="w l"
local str="set term wxt size 900,500 title 'wild plotting'
set format y '%g'
set logs
plot"
while [ $# -gt 0 ]
do str="$str '$1' $arg,"
shift
done
echo "$str" | gnuplot -persist
}
そしてそれを使用しますplo *.dat ../../dir2/*.out
のように、現在のディレクトリにあるすべての.dat
ファイルと、たまたまレベルが上がっている.out
というディレクトリにあるすべてのdir2
ファイルをプロットします。
代替コマンドは次のとおりです。
gnuplot -p -e 'plot for [file in system("find . -name \\*.txt -depth 1")] file using 1:2 title file with lines'