3つのプロットを含むgnuplotを作成します。データはインラインにする必要があります
次のようになります。
現在、次のgnuplotスクリプトを使用してプロットを作成しています。
set terminal png
set output "test.png"
plot for[col=2:4] "data.txt" using 1:col title columnheader(col) with lines
ファイル data.txt
は:
Generation Best Worst Average
0 2 1 0
1 3 1 2
2 4 3 3
3 4 3 3
4 6 3 4
5 7 4 5
6 9 6 7
7 10 6 9
8 10 5 6
9 11 6 8
10 12 7 9
Data.txtをgnuplotにパイプし、スクリプト内で参照されているデータファイルに依存しないようにします。何かのようなもの cat data.txt | gnuplot plot.gnu
。その理由は、いくつかのdata.txt
ファイルを作成し、plot.gnu
これらのそれぞれのファイル。
特別な'-'
file このstackoverflowスレッド内 と私は 1つのファイル内の複数のプロット について読みました。ただし、これにはgnuplotコードにデータを含める必要があり、クリーンではありません。
Unixシステム(Windows以外)を使用している場合は、'<cat'
の代わりに '-'
stdinから読み取る:
plot '<cat' using ...
その後、cat data.txt | gnuplot script.gp
。ただし、質問で言及している特定のケースでは、forループ内のプロットで、入力を3回読み取ります。そのため、stdinを介してデータを送信することは適切ではありません。データは最初に読み取られた後に失われるためです。
直接的な答えではありませんが、これは私がデータをすばやく見るために使用するものです。 cut
コマンドで特に役立ちます
cat data.txt | cut -f2 -d' ' | gnuplot -p -e "plot '<cat'"
シェルからgnuplotの-eオプションを使用することの何が問題になっていますか?以下を使用して、シェルから変数、たとえばdata.txtを入力として提供できます。
gnuplot -e "filename='data.txt';ofilename='test.png'" plot.gnu
Forループを使用して、シェルから「ファイル名」の異なる値で上記のコマンドを複数回呼び出すことができるはずです。
そして、スクリプトplot.gnuを次のように変更します。
set terminal png
set output ofilename
plot for[col=2:4] filename using 1:col title columnheader(col) with lines
パイプからのデータを複数回プロットする場合は、何らかの方法でメモリに保存する必要があります。私の好ましい方法は、ほとんどのLinuxシステムに存在し、RAMにマップされる/dev/shm
の一時ファイルを使用することです。物事をきれいに保つために、終了時に一時ファイルを削除するトラップを設定します。
例(data.txtを使用):
cat data.txt | (cat > /dev/shm/mytempfile && trap 'rm /dev/shm/mytempfile' EXIT && gnuplot -e "set terminal dumb; plot for[col=2:4] '/dev/shm/mytempfile' using 1:col title columnheader(col) with lines")
結果:
12 ++------------+-------------+-------------+-------------+------------**
+ + + + + Best ****** +
| Worst***#### |
10 ++ *******Average $$$$$$++
| **** |
| *** $$$$ $$$$
8 ++ ** $$ $$ $$$$$ ++
| ** $$ $$ $$ |
| ***** $$$ $$ ####
6 ++ **** $$ ############# $$ ##### ++
| ** $$ ## # #### |
| ** $$$ ## ## |
| ** $$$$ ## |
4 ++ *********** $$$$$ #### ++
| ***** ################### |
| **** $$## |
2 ** $$$## ++
######### |
+ $$ + + + + +
0 $$------------+-------------+-------------+-------------+------------++
0 2 4 6 8 10
System()コマンドの使用方法
set terminal png
set output "test.png"
# read Shell input
# the echo prints the variable, which is then piped to gnuplot
fname = system("read filename; echo $filename")
plot for[col=2:4] fname using 1:col title columnheader(col) with lines
あなたは今それを呼び出すことができます
echo "data.txt" | gnuplot script.gp