2012-06-18 14 views
62

Próbuję wykreślić wykres za pomocą gnuplot. Mam 6 plików tekstowych. Każdy plik tekstowy zawiera dwie kolumny. Pierwsza kolumna przedstawia czas w sekundach (jest pływająca numer punktu). Odcinek jest numerem kolejnym. Chcę wykreślić wykres liczby czasu i sekwencji na jednym wykresie dla wszystkich sześciu plików. Korzystam z tego pliku, aby to zrobić.gnuplot: wykreślanie danych z wielu plików wejściowych na jednym wykresie

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" 

Gdzie są moje pliki:

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

To daje dziwny błąd jak poniżej:

"plot.plt", linia 24: zmienna niezdefiniowana: działka

robię coś wrong.Is możliwe narysować dane wejściowe z różnych plików na tym samym wykresie.

+0

Bądź mądry, iść do tego tematu http: // stackoverflow .pl/questions/14946530/loop-structure-inside-gnuplot –

Odpowiedz

106

Jesteście tak blisko!

Zmiana:

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" 

do:

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" 

Błąd dlatego gnuplot próbuje interpretować słowo "plot" w nazwie pliku na działce, ale nie przypisano żadnych ciągów do zmiennej o nazwie "działka" (co jest dobre - byłoby to bardzo mylące).

57

Może się okazać, że pętle gnuplot dla pętli są przydatne w tym przypadku, jeśli odpowiednio dopasujesz nazwy plików lub tytułów wykresów.

np.

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

i

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

Znam to Stary, ale dziękuję za dodanie tego alternatywnego rozwiązania. Nie wiedział o pętlach w gnuplot i są niesamowitą funkcją. – Amit

+0

Zakładając normalną nazwę pliku (name.dat) myślę, że powinien to być plik. ". Dat". Pierwszy . łączy nazwę pliku z "dat", ale nie jest zawarta w nazwie pliku faktycznie użytej w komendzie drukowania. – jake

+0

Jak wykreślić * wszystkie * pliki w katalogu bez jawnego zapisywania ich nazw? (http: // stackoverflow.com/q/29969393/855050) – becko

14

Replot jest kolejnym sposobem, aby dostać wiele działek na raz:

plot file1.data 
replot file2.data 
Powiązane problemy