web-dev-qa-db-ja.com

gnuplotと同時にディレクトリ内のすべてのファイルをプロットしますか?

この質問に似た何かをしたい: gnuplot:複数の入力ファイルからのデータを単一のグラフにプロットする

名前を明示的に記述せずに、ディレクトリ内のすべてのファイルallを同時にプロットしたいと思います。列番号はすべてのファイルで同じです。私に何ができる?

plot for [file in *] file u 3:2は機能しません。

また、各ファイルに異なる凡例を付けたくありません。すべてのファイルのすべてのポイントは、すべてが1つのファイルからのものであるかのように同じように扱われる必要があります。

9
becko

次のようなことを試すことができます:

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]は、任意の量の空白で始まり、その後に数字が続くすべての行に一致します。

6
Richard

ジョナタンの答えの代わりに、私は

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.datdata_2.datなどの名前のファイルが複数あり、12などのラベルが付けられている場合、次のようになります。

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
7
vagoberto

ワイルドカードを使用してプロットするファイルも選択できるようにしたいので、必要に応じて次のように実行できますが、方法はたくさんあります。次のスクリプトを作成します。

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

2

次のコマンドを試してください。

gnuplot -e 'plot for [file in system("find . -depth 1 -type f -print")] file u 3:2'

注:プロットウィンドウを維持するには、-pを追加します。

0
kenorb