我编写了一个 perl 脚本来解析一些文件并获取一些数据。现在我想使用 gnuplot 为这些数据生成图表。我可以将变量从 perl 传递给 gnuplot 吗?
顺便说一句,由于我在系统中没有 Chart::Graph,我打算使用管道,像这样
open GP, '| gnuplot';
.
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>