GD::Graph::pie

GD::Graph::pie(円グラフ)

GD::Graph::pie(円グラフ)

[user]$ vim pie.pl

#!/usr/bin/perl

use  strict;
use  warnings;
use  v5.10;
use  List::MoreUtils qw( all );
use  GD::Simple;     # 画像作成
use  GD::Graph::pie; # 円グラフ

# 画像サイズ
use  Readonly;
Readonly  my  $WIDTH  => 180;
Readonly  my  $HEIGHT => 200;

# 日本語フォント([user]$ locate .ttf で調べる)
Readonly  my  $TTF => '/usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf';

# データ
my  @foot = qw( 逃げ 先行 差し 追込 );
my  @cnt  = qw( 10   20   25   5    );
my  @data = ( \@foot, \@cnt );

my  $img_obj = undef;
if ( all { $_ == 0 } @cnt ) {   # データが存在しない場合、画像作成
    $img_obj = GD::Simple->new( $WIDTH, $HEIGHT );
    $img_obj->fgcolor( 'black' );   # 色
    $img_obj->font( 'arial' );      # フォント
    $img_obj->fontsize( 10 );       # フォントサイズ
    $img_obj->moveTo( $WIDTH / 5, $HEIGHT / 2 );   # 始点 x, y
    $img_obj->string( 'There is no data.' );   # 文字列
}
else { # 円グラフ作成
    # GD::Graph::pie オブジェクト作成
    my  $graph_obj = GD::Graph::pie->new( $WIDTH, $HEIGHT );

    # パラメータ設定
    $graph_obj->set (
        title       => '脚質',      # タイトル
        start_angle => 180,         # スタート位置
        '3d'        => 0,           # 立体表示
        bgclr       => '#ffffff',   # 背景色
        dclrs       => ['#ffcccc', '#ccffcc', '#ccccff', '#ffffcc'],   # グラフ色
    );

    # 日本語使用
    $graph_obj->set_title_font( $TTF, 10 );
    $graph_obj->set_value_font( $TTF,  8 );

    # GD::Image オブジェクト作成
    $img_obj = $graph_obj->plot( \@data )  or  croak  $graph_obj->error;
}

# ファイルへ出力
use  Carp qw( croak );
use  Fcntl;
use  IO::Handle;
my  $tmpfn = "tmp.$$";   # テンポラリファイル名
my  $imgfn = 'pie.png';  # 画像ファイル名
sysopen  ( my $fh,  $tmpfn,  O_WRONLY | O_TRUNC | O_CREAT,  0644 )  or  croak  qq{can't open :$!};
flock  $fh,  2;
binmode  $fh;   # windows 用、バイナリモード
print  {$fh}  $img_obj->png() or  croak  qq{can't write :$!};
# ファイルファンドルへの出力をバッファしない
$fh->flush                  or  croak  qq{can't flush :$!};
# メモリ上にあるファイルの内容をストレージデバイス上のものと同期させる
$fh->sync                   or  croak  qq{can't fsync :$!};
close  $fh                   or  croak  qq{can't close :$!};
# ファイル名変更
rename  $tmpfn, $imgfn       or  croak  qq{can't rename $tmpfn to $imgfn :$!};

[user]$ chmod 700 pie.pl

[user]$ ./pie.pl