Chart::Graph モジュールをインストール
ppm> install Chart-GraphWindows で実行すると temporary directory `/tmp/Graph_Gnuplot_xxxx' を作成できないとエラー表示されるので、環境変数に TMPDIR を設定すればよいと考えたのだが、
> set TMPDIR=%USERPROFILE%\Local Settings\Tempこのようにすると出力先指定でディレクトリ記号が
set output "C:\Documents and Settings\xxxxxxx\Local Settings\ Temp/Graph_Gnuplot_7672/plot.2.png"\ (円マーク)と / (スラッシュ) の混在となってしまう。これでは gnuplot が解釈できないのでスクリプト内で
$ENV{TMPDIR}=".";と指定して出力先を current directory 以下にしてもらう。
set output "./Graph_Gnuplot_7980/plot.2.png"スクリプトから gnuplot を実行しようとするところで
program not found in search path: gnuplotとエラー表示される。これは Chart::Graph::Utils 内で使用される _get_path が Linux 形式の PATH しか対応していないためである。
sub _get_path { my ($exe) = @_; my @path = split (/:/, $ENV{PATH}); my $program; foreach my $i(@path){ $program = "$i/$exe"; if (-x $program) { return $program; } } carp "program not found in search path: $exe"; return 0; }また gnuplot というコマンドを実行しようとするので Perl/site/lib/Chart/Graph/Gnuplot.pm にある gnuplot コマンドを設定する _set_gnupaths を見てみると
sub _set_gnupaths { if (not defined($gnuplot)) { if (not $gnuplot = _get_path("gnuplot")) { return 0; } } if (not defined($ppmtogif)) { if (not $ppmtogif = _get_path("ppmtogif")) { return 0; } } return 1; }となっているので $gnuplot に直接実行プログラムを記述してやればこの問題は回避できる。
使い方
Windows 用 Gnuplot では pgnuplot.exe なので下記のように指定する。
$Chart::Graph::Gnuplot::gnuplot = "c:/usr/gnuplot/bin/pgnuplot.exe";Example: テストスクリプト
use utf8; use Chart::Graph::Gnuplot qw(gnuplot); $Chart::Graph::save_tmpfiles = 0; $Chart::Graph::Gnuplot::gnuplot = "c:/usr/gnuplot/bin/pgnuplot.exe"; $ENV{TMPDIR}="."; gnuplot({'title' => 'Test graph', 'xrange' => '[0:3]', 'yrange' => '[0:50]', 'output type' => 'png', 'output file' => 'test.png', 'size' => [0.625, 0.625], 'extra_opts' => join("\n", 'set grid'), }, [{'title' => 'data1', 'type' => 'matrix'}, [[0,5], [1,10], [2,20], [3,30]]], [{'title' => 'data2', 'style' => 'lines', 'type' => 'matrix'}, [[0,20], [1,5], [2,15], [3,12]]], [{'title' => 'y=10x+10', 'style' => 'lines', 'type' => 'function'}, '10+10*x'], );size を指定しているのは、出力データの画像サイズを調整するため。デフォルト (size 指定なし) では 640x480 pixel となるので 400x300 pixel を作りたければ縦横 0.625 倍と指定すればよい。
出力結果
0 件のコメント:
コメントを投稿