gnuplot: Zeichnen von Daten aus mehreren Eingabedateien in einem einzigen Diagramm

82

Ich versuche, ein Diagramm mit Gnuplot zu zeichnen. Ich habe sechs Textdateien. Jede Textdatei enthält zwei Spalten. Die erste Spalte gibt die Zeit in Sekunden an (eine Gleitkommazahl). Die zweite ist eine Sequenznummer. Ich möchte das Diagramm von Zeit und Sequenznummer in einem einzigen Diagramm für alle sechs Dateien darstellen. Ich benutze diese Datei, um das zu tun.

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"

Wo meine Dateien sind:

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

Es gibt einen seltsamen Fehler wie folgt:

"plot.plt", Zeile 24: undefinierte Variable: plot

Mache ich etwas falsch? Ist es möglich, die Eingabedaten aus verschiedenen Dateien im selben Diagramm darzustellen?

liv2hak
quelle
Seien Sie schlau, gehen Sie zu diesem Thema stackoverflow.com/questions/14946530/…
Marcos Alex

Antworten:

131

Du bist so nah!

Veränderung

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"

zu

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"

Der Fehler tritt auf, weil gnuplot versucht, das Wort "plot" als den zu plottenden Dateinamen zu interpretieren, aber Sie haben einer Variablen mit dem Namen "plot" keine Zeichenfolgen zugewiesen (was gut ist - das wäre sehr verwirrend).

mgilson
quelle
72

Möglicherweise sind Gnuplots für Schleifen in diesem Fall hilfreich, wenn Sie Ihre Dateinamen oder Diagrammtitel entsprechend anpassen.

z.B

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

und

filename(n) = sprintf("file_%d", n)
plot for [i=1:10] filename(i) using 1:2 with lines
Richard
quelle
5
Ich weiß, dass dies alt ist, aber ich danke Ihnen, dass Sie diese alternative Lösung hinzugefügt haben. War sich der Schleifen in Gnuplot nicht bewusst, und sie sind eine erstaunliche Funktion.
Amit
Unter der Annahme einer normalen Dateinamenkonvention (name.dat) sollte dies eine Datei sein. ". Dat". Der Erste . Verkettet den Dateinamen mit "dat", ist jedoch nicht in dem Dateinamen enthalten, der tatsächlich im Plotbefehl verwendet wird.
Jake
Wie kann ich alle Dateien in einem Verzeichnis zeichnen, ohne ihre Namen explizit zu schreiben? ( stackoverflow.com/q/29969393/855050 )
winko
Ich habe eine Antwort auf diese Frage hinzugefügt, @becko.
Richard
21

Replot ist eine weitere Möglichkeit, mehrere Diagramme gleichzeitig zu erhalten:

plot file1.data
replot file2.data
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
1
Beste Antwort, die erste hat nicht funktioniert. Ausgabe war: "Format muss 1-7 Konvertierungen vom Typ double (% lf) haben". Mit den anderen Optionen können Sie dies nur tun, wenn alle Datenspalten gleich sind.
RSM