2013-06-27 57 views
0

我寫了一個perl腳本來解析一些文件並獲取一些數據。現在我想用gnuplot爲這些數據生成圖表。我可以將變量從perl傳遞給gnuplot嗎?將perl變量傳遞給gnuplot

順便說一句,因爲我沒有圖::圖形系統,我打算用管,這樣的事情

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