2012-06-18 12 views
62

Ich versuche, ein Diagramm mit Gnuplot zu plotten.Ich habe 6 Textdateien.Jede Textdatei enthält zwei Spalten.Die erste Spalte stellt Zeit in Sekunden (es ist ein Floating Punktnummer). Zweitens ist eine Sequenznummer. Ich möchte den Graph der Zeit vs Sequenznummer in einem einzigen Diagramm für alle sechs Dateien plotten. Ich verwende diese Datei, um das zu tun.gnuplot: Plotten von Daten aus mehreren Eingabedateien in einem einzigen Diagramm

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 ist ein seltsamen Fehler wie unten geben:

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

Bin ich etwas wrong.Is tue es möglich, um die Eingabedaten von verschiedenen Dateien im selben Diagramm darzustellen.

+0

klug sein, gehen Sie zu diesem Thema http: // Stackoverflow .com/questions/14946530/loop-structure-inside-gnuplot –

Antwort

106

Sie sind so nah!

Wechsel:

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 ist, weil gnuplot versucht, das Wort „Handlung“ als Dateinamen zu interpretieren plotten, aber Sie haben keine Saiten nicht belegt zu einer Variablen namens "plot" (was gut ist - das wäre super verwirrend).

57

Sie können feststellen, dass die for loops von gnuplot in diesem Fall nützlich sind, wenn Sie Ihre Dateinamen oder Grafiktitel 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 
+5

Ich weiß das ich s alt, aber danke, dass Sie diese alternative Lösung hinzugefügt haben. War nicht bewusst, Schleifen in gnuplot, und sie sind eine erstaunliche Funktion. – Amit

+0

Unter der Annahme normaler Dateinamen Konvention (name.dat) Ich denke, das sollte Datei sein. ". Dat". Der Erste . verkettet den Dateinamen zu "dat", ist jedoch nicht in dem Dateinamen enthalten, der tatsächlich im Zeichenbefehl verwendet wird. – jake

+0

Wie kann ich * all * die Dateien in einem Verzeichnis darstellen, ohne ihre Namen explizit zu schreiben? (http: // Stapelüberlauf.com/q/29969393/855050) – becko

14

Replot ist eine andere Art und Weise mehrere Plots auf einmal zu bekommen:

plot file1.data 
replot file2.data 
Verwandte Themen