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


84

gnuplotを使ってグラフをプロットしようとしています。6つのテキストファイルがあります。各テキストファイルには2つの列が含まれています。最初の列は秒単位の時間を表します(浮動小数点数)。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行目:未定義の変数:plot

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


賢く、このトピックにアクセスしてください stackoverflow.com/questions/14946530/…–
マルコスアレックス

回答:


133

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

変化する

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が「plot」という単語をプロットするファイル名として解釈しようとしているが、「plot」という名前の変数に文字列を割り当てていないため、エラーが発生します(これは良いことです-非常に混乱します)。


74

この場合、ファイル名またはグラフのタイトルを適切に調整すると、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

6
私はこれが古いことを知っていますが、その代替ソリューションを追加していただきありがとうございます。gnuplotのループを認識していなかったので、すばらしい機能です。
アミット2014

通常のファイル名規則(name.dat)を想定すると、これはfile。 "。dat"である必要があると思います。最初 。ファイル名を「dat」に連結しますが、プロットコマンドで実際に使用されるファイル名には含まれません。
ジェイク2014年

名前を明示的に記述せずに、ディレクトリ内のすべてのファイルをプロットするにはどうすればよいですか?(stackoverflow.com/q/29969393/855050
becko

その質問への回答、@ beckoを追加しました。
リチャード

22

replot

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

plot file1.data
replot file2.data

1
最良の答えは、最初のものは機能しませんでした。出力は次のとおりです。「フォーマットには、double型(%lf)の1〜7回の変換が必要です」。他のオプションでは、すべてのデータ列が同じ場合にのみ実行できます。
RSM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.