0

我编写了一个 perl 脚本来解析一些文件并获取一些数据。现在我想使用 gnuplot 为这些数据生成图表。我可以将变量从 perl 传递给 gnuplot 吗?

顺便说一句,由于我在系统中没有 Chart::Graph,我打算使用管道,像这样

open GP, '| gnuplot';.

4

1 回答 1

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 以生成 postscript 输出。要查看可能的输出格式列表,请键入:

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> 
于 2013-06-28T01:05:39.293 回答