gnuplot: построение данных из нескольких входных файлов на одном графике

84

Я пытаюсь построить график с помощью 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

Я делаю что-то неправильно? Можно ли отобразить входные данные из разных файлов на одном графике?

liv2hak
источник
Будьте умны, перейдите в эту тему 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

Вы можете обнаружить, что в этом случае полезны циклы for в gnuplot, если вы соответствующим образом измените имена файлов или заголовки графиков.

например

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, и это потрясающая функция.
Амит
Предполагая обычное соглашение об именах файлов (name.dat), я думаю, это должен быть файл .dat. Первый . объединяет имя файла с "dat", но не включается в имя файла, фактически используемое в команде построения графика.
Джейк
Как я могу построить все файлы в каталоге, не записывая их имена явно? ( stackoverflow.com/q/29969393/855050 )
becko
Я добавил ответ на этот вопрос, @becko.
Ричард
22

replot

Это еще один способ получить сразу несколько графиков:

plot file1.data
replot file2.data
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
1
лучший ответ, первый не сработал. Результат был: «формат должен иметь 1-7 преобразований типа double (% lf)». В то время как другие параметры позволяют сделать это только в том случае, если все столбцы данных одинаковы.
RSM