この質問に似た何かをしたい: gnuplot:複数の入力ファイルからのデータを単一のグラフにプロットする 。
名前を明示的に記述せずに、ディレクトリ内のすべてのファイルallを同時にプロットしたいと思います。列番号はすべてのファイルで同じです。私に何ができる?
plot for [file in *] file u 3:2
は機能しません。
また、各ファイルに異なる凡例を付けたくありません。すべてのファイルのすべてのポイントは、すべてが1つのファイルからのものであるかのように同じように扱われる必要があります。
次のようなことを試すことができます:
a=system('a=`tempfile`;cat *.dat > $a;echo "$a"')
plot a u 3:2
これは、コマンドラインtempfile
コマンドを使用して、安全で一意の使い捨ての一時ファイルを作成します。すべてのデータファイルをこのファイルにマッシュアップします。次に、ファイルの名前をエコーして、gnuplotがファイルを取得できるようにします。次に、gnuplotは物事をプロットします。
ヘッダー行が心配ですか?これを試して:
a=system('a=`tempfile`;cat *.dat | grep "^\s*[0-9]" > $a;echo "$a"')
正規表現^\s*[0-9]
は、任意の量の空白で始まり、その後に数字が続くすべての行に一致します。
ジョナタンの答えの代わりに、私は
FILES = system("ls -1 *.dat")
plot for [data in FILES] data u 1:2 w p pt 1 lt rgb 'black' notitle
または
plot '<(cat *.dat)' u 3:2 title 'your data'
最初のオプションは、各曲線にラベルを付ける場合に、より柔軟性を提供します。たとえば、data_1.dat
、data_2.dat
などの名前のファイルが複数あり、1
、2
などのラベルが付けられている場合、次のようになります。
FILES = system("ls -1 data_*.dat")
LABEL = system("ls -1 data_*.dat | sed -e 's/data_//' -e 's/.dat//'")
plot for [i=1:words(FILES)] Word(FILES,i) u 3:2 title Word(LABEL,i) noenhanced
ワイルドカードを使用してプロットするファイルも選択できるようにしたいので、必要に応じて次のように実行できますが、方法はたくさんあります。次のスクリプトを作成します。
script.sh:
gnuplot -p << eof
set term wxt size 1200,900 title 'plots'
set logs
set xlabel 'energy'
plot for [ file in "$@" ] file w l
eof
chmod u+x script.sh
を実行します
./script.sh dir/* *.dat
のように実行します
必要な場合は、エイリアスを作成して適切な場所に配置することがよくあります:) Cheers/J
次のコマンドを試してください。
gnuplot -e 'plot for [file in system("find . -depth 1 -type f -print")] file u 3:2'
注:プロットウィンドウを維持するには、-p
を追加します。