web-dev-qa-db-ja.com

gnuplot:複数の入力ファイルからのデータを単一のグラフにプロットする

Gnuplotを使用してグラフをプロットしようとしています。6つのテキストファイルがあります。各テキストファイルには2つの列が含まれています。 6つのファイルすべてについて、時間とシーケンス番号のグラフを1つのグラフで表示します。

set terminal png
set output 'akamai.png'

set xdata time
set timefmt "%S"
set xlabel "time"

set autoscale

set ylabel "highest seq number"
set format y "%s"

set title "seq number over time"
set key reverse Left outside
set grid

set style data linespoints

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

ファイルの場所:

  • print_1012720
  • print_1058167
  • print_193548
  • print_401125
  • print_401275
  • print_401276

以下のような奇妙なエラーが発生しています:

「plot.plt」、行24:未定義変数:プロット

私は何か間違っていますか?同じグラフに異なるファイルからの入力データをプロットすることは可能ですか?.

76
liv2hak

あなたはとても近いです!

変化する:

plot "print_1012720" using 1:2 title "Flow 1", \
plot "print_1058167" using 1:2 title "Flow 2", \
plot "print_193548"  using 1:2 title "Flow 3", \ 
plot "print_401125"  using 1:2 title "Flow 4", \
plot "print_401275"  using 1:2 title "Flow 5", \
plot "print_401276"  using 1:2 title "Flow 6"

に:

plot "print_1012720" using 1:2 title "Flow 1", \
     "print_1058167" using 1:2 title "Flow 2", \
     "print_193548"  using 1:2 title "Flow 3", \ 
     "print_401125"  using 1:2 title "Flow 4", \
     "print_401275"  using 1:2 title "Flow 5", \
     "print_401276"  using 1:2 title "Flow 6"

エラーは、gnuplotがWordの "plot"をプロットするファイル名として解釈しようとしているが、 "plot"という名前の変数に文字列を割り当てていないためです(これは非常に紛らわしいです)。

123
mgilson

この場合、ファイル名やグラフのタイトルを適切に調整すれば、gnuplotのforループが役立つことがわかります。

例えば.

filenames = "first second third fourth fifth"
plot for [file in filenames] file."dat" using 1:2 with lines

そして

filename(n) = sprintf("file_%d", n)
plot for [i=1:10] filename(i) using 1:2 with lines
65
Richard

replotは、複数のプロットを一度に取得する別の方法です。

plot file1.data
replot file2.data