Подтвердить что ты не робот

Структура петли внутри gnuplot?

Есть ли способ итеративно извлекать данные из нескольких файлов и строить их на одном графике в gnuplot. Предположим, у меня есть файлы, такие как data1.txt, data2.txt...... data1000.txt; каждый из которых имеет одинаковое количество столбцов. Теперь я мог бы написать что-то вроде:

plot "data1.txt" using 1:2 title "Flow 1", \
     "data2.txt" using 1:2 title "Flow 2", \
      .
      .
      .
     "data1000.txt"  using 1:2 title "Flow 6"

Но это было бы действительно неудобно. Мне было интересно, есть ли способ прокрутить часть plot в gnuplot.

4b9b3361

Ответ 1

Уверен (в gnuplot 4.4 +):

plot for [i=1:1000] 'data'.i.'.txt' using 1:2 title 'Flow '.i

Переменная i может быть интерпретирована как переменная или строка, поэтому вы можете сделать что-то вроде

plot for [i=1:1000] 'data'.i.'.txt' using 1:($2+i) title 'Flow '.i

если вы хотите, чтобы линии смещались друг от друга.

Введите help iteration в командной строке gnuplot для получения дополнительной информации.

Также не забудьте увидеть ответ @DarioP о синтаксисе do for; что дает вам что-то ближе к традиционному циклу for.

Ответ 2

Посмотрите также на команду do { ... }, поскольку gnuplot 4.6 так сильно, насколько это возможно:

do for [t=0:50] {
  outfile = sprintf('animation/bessel%03.0f.png',t)
  set output outfile
  splot u*sin(v),u*cos(v),bessel(u,t/50.0) w pm3d ls 1
}

http://www.gnuplotting.org/gnuplot-4-6-do/

Ответ 3

У меня есть script all.p

set ...
...
list=system('ls -1B *.dat')
plot for [file in list] file w l u 1:2 t file

Здесь две последние строки являются буквальными, а не эвристическими. Затем я запустил

$ gnuplot -p all.p

Измените *.dat на тип файла, который у вас есть, или добавьте типы файлов.

Следующий шаг: добавьте в ~/.bashrc эту строку

alias p='gnuplot -p ~/./all.p'

и поместите свой файл all.p в свой домашний каталог и вуаля. Вы можете отобразить все файлы в любом каталоге, набрав p и введите.

EDIT Я изменил команду, потому что она не сработала. Ранее он содержал list(i)=word(system(ls -1B *.dat),i).

Ответ 4

Я хотел использовать подстановочные знаки для создания нескольких файлов, часто размещаемых в разных каталогах, при работе в любом каталоге. Решение, которое я нашел, заключалось в создании следующей функции в ~/.bashrc

plo () {
local arg="w l"
local str="set term wxt size 900,500 title 'wild plotting'
set format y '%g'
set logs
plot"
while [ $# -gt 0 ]
        do str="$str '$1' $arg,"
        shift
done
echo "$str" | gnuplot -persist
}

и использовать его, например. например plo *.dat ../../dir2/*.out, отобразить все .dat файлы в текущем каталоге и все файлы .out в каталоге, который находится на уровне выше и называется dir2.