gnuplot: побудова графічних даних з декількох вхідних файлів на одному графіку


83

Я намагаюся побудувати графік за допомогою gnuplot. У мене шість текстових файлів. Кожен текстовий файл містить два стовпці. Перший стовпець відображає час у секундах (число з плаваючою комою). Другий - порядковий номер. Я хочу побудувати графік часу проти порядкового номера в одному графіку для всіх шести файлів. Я використовую цей файл для цього.

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/…
Маркос Алекс

Відповіді:


132

Ви так близько!

Зміна

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" (що добре - це було б дуже заплутано).


73

Ви можете виявити, що gnuplot's для циклів корисні в цьому випадку, якщо ви правильно налаштуєте імена файлів або заголовки графіків.

напр

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, і це дивовижна особливість.
Amit

Припускаючи звичайне узгодження імені файлу (name.dat), я думаю, це має бути файл. ". Dat". Перший . об'єднує ім'я файлу в "dat", але не входить до імені файлу, фактично використовуваного в команді побудови графіка.
jake

Як я можу побудувати всі файли в каталозі без явного написання їх імен? ( stackoverflow.com/q/29969393/855050 )
маня

Я додав відповідь на це запитання, @becko.
Річард

21

replot - це ще один спосіб отримати кілька графіків одночасно:

plot file1.data
replot file2.data

1
найкраща відповідь, перша не спрацювала. Результат був: "формат повинен мати 1-7 перетворень типу double (% lf)". Хоча інші варіанти дозволяють це робити, лише якщо всі стовпці даних однакові.
RSM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.