2016-01-25 4 views
1

Я пытаюсь построить некоторые данные с помощью gnuplot. Я хочу использовать статический файл script.gp и передавать его из stdin с моими данными. У меня также есть несколько наборов данных, которые мне нужно передать сценарию.построить несколько наборов данных с помощью скрипта gnuplot из stdin

script.gp:

set term jpeg 
set encoding utf8 
plot '<cat' index 0 with lines, plot '' index 1 with lines 

данные:

1 2 
2 2 


0 0 
7 4 

Команда:

cat data | gnuplot script.gp 

Это не работает, так как я предполагаю, что он пытается перечитать из стандартного ввода , Есть ли способ, которым я могу это сделать, или мне нужно использовать временные файлы для хранения моих данных?

+0

если ваши данные уже находятся в файле, то почему бы вам не просто построить файл? Если данные поступают из команды, почему бы вам не попросить gnuplot построить вывод команды? например 'plot ' bibi

+0

Спасибо за ответ. Данные еще не находятся в файле, он генерируется «на лету» (по сценарию php). Моя мысль заключалась в том, чтобы иметь скрипт gnuplot, версию и все, описывая формат графиков, которые я хочу, и вызывать этот скрипт с разными наборами данных, чтобы генерировать графики. –

ответ

1

Решение Я обнаружил, до сих пор имеет много недостатков, однако это отчасти делает работу:
Используйте „Gnuplot -e“ и кот файл сценария в команду:

cat data | gnuplot -e "$(cat script.gp)" 

изменения script.gp использование ; в конце каждой строки, удалить все комментарии и изменить команду, используя участок '-' вместо '<cat' и удаления index:

set term jpeg; 
set encoding utf8; 
plot '-' with lines, plot '-' with lines 

изменить формат данных, отделяя каждый набор данных с линией с e:

1 2 
2 2 
e 
0 0 
7 4 
0

Я бы предложил использовать специальный файл «<», который позволяет вызывать сценарий PHP, и вы можете иметь свой файл GNUPLOT plot.gp:

set term jpeg; 
set encoding utf8; 
set output file_out 

my_cmd1=sprintf('< my_script %s', my_file1) 
my_cmd2=sprintf('< my_script %s', my_file2) 
plot my_cmd1 with lines, my_cmd2 with lines 

и вы вызовете в оболочке с:

gnuplot -e 'my_file1="input1.txt"; my_file2="input2.txt"; file_out="my_out.jpg"' plot.gp 
Смежные вопросы