2013-06-27 3 views
0

Я написал скрипт perl для разбора некоторых файлов и получения некоторых данных. Теперь я хочу использовать gnuplot для создания диаграмм для этих данных. Могу ли я передать переменные из perl в gnuplot?передать perl-переменные в gnuplot

Кстати, так как у меня нет Chart :: Graph в системе, я планирую использовать трубку, что-то вроде этого

open GP, '| gnuplot';.

ответ

3
use strict; 
use warnings; 
use 5.014; 


open my $PROGRAM, '|-', 'gnuplot' 
    or die "Couldn't pipe to gnuplot: $!"; 

say {$PROGRAM} 'set terminal postscript'; 
say {$PROGRAM} "set output 'plot.ps'"; 
say {$PROGRAM} "plot 'mydata.dat' using 1:2 title 'Column'"; 

close $PROGRAM; 

Команда:

set terminal postscript 

устанавливает GNUPLOT производить постскриптума выход. Чтобы увидеть список возможных типов форматов вывода:

gnuplot> set terminal 

Команда:

set output 'plot.ps' 

направляет вывод в файл plot.ps.

Команда:

plot 'mydata.dat' using 1:2 title 'Column' 

читает некоторые данные из файла mydata.dat и участки его.

Для ввода данных в командной строке, необходимо указать «-» в качестве имени файла и использовать $ переменные:

gnuplot> plot "-" using ($1):($2) with lines title 'My Line' 
input data ('e' ends) > 1 2 
input data ('e' ends) > 3 4 
input data ('e' ends) > e 
gnuplot> 

Таким образом, вы можете изменить программу на языке Perl, как это:

use strict; 
use warnings; 
use 5.014; 

open my $PROGRAM, '|-', 'gnuplot' 
    or die "Couldn't pipe to gnuplot: $!"; 

say {$PROGRAM} 'set terminal postscript'; 
say {$PROGRAM} "set output 'plot.ps'"; 
say {$PROGRAM} "plot '-' using (\$1):(\$2) with lines title 'My Line'"; 
print {$PROGRAM} "1 2\n3 4\ne\n"; 

close $PROGRAM; 

Для сюжетных кругов, вы можете сделать это:

gnuplot> set xrange [-2:5]  
gnuplot> set yrange[-2:5]  
gnuplot> plot "-" using ($1):($2):($3) with circles title 'My Circles' 
input data ('e' ends) > 0 0 1  ****(x,y,radius) 
input data ('e' ends) > 1 1 2 
input data ('e' ends) > e 
gnuplot> 
+0

Я действительно думал передать массив в gnuplot, а элементы в массиве могут быть только 0, 1 или 2. Согласно значению каждого элемента gnuplot либо рисует прямоугольник, круг или треугольник. Я думаю, что gnuplot не лучший инструмент для этого, не так ли? @ 7stud – coldler

+0

Это не слишком обременительно, чтобы записывать ваши данные в файл. При необходимости вы можете использовать модуль tempfile. – 7stud

+0

Но могу ли я отобразить «0, 1, 2» в «прямоугольник, круг, треугольник», даже если я напишу «0, 1, 2» в файл? @ 7stud – coldler

Смежные вопросы