Perl

グラフの作成

コード
#!/usr/bin/perl -w

use strict;

use CGI;
use GD::Graph::lines;

# データのセット (各都市の平均気温)#
my @Lavels  = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
my @Sapporo = qw( -0.9 -0.3 3.5 11.1 17.0 21.1 25.0 26.1 22.0 15.8 8.1 2.1 );
my @Tokyo   = qw( 9.8 10.0 12.9 18.4 22.7 25.2 29.0 30.8 26.8 21.6 16.7 12.3 );
my @Naha    = qw( 19.1 19.2 21.3 24.0 26.4 29.2 31.3 30.9 29.9 27.5 24.2 20.9 );

my @data = ( \@Lavels,
             \@Sapporo,
             \@Tokyo,
             \@Naha);

my $oCGI = CGI->new();
# グラフ用オブジェクトの作成 サイズ(横550px,縦350px)指定 #
my $graph = GD::Graph::lines->new(550,350);

# ヘッダーを送信 #
print $oCGI->header(-type =>"image/jpeg");

# グラフオプションの設定 #
$graph->set( title         => "Average Temperture",
             y_label       => "Celsius",
             line_width    => 2,
             y_max_value   => 40,
             y_min_value   => -10,
             y_tick_number => 5);

# 凡例 #
$graph->set_legend("Sapporo","Tokyo","Naha");

# グラフを出力 #
print $graph->plot(\@data)->png();

作成したグラフ

データをファイルから読み込む場合

データファイル
LABEL
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
CITY,Tokyo
9.8
10
12.9
18.4
22.7
25.2
29
30.8
26.8
21.6
16.7
12.3
CITY,Sapporo
-0.9
-0.3
3.5
11.1
17
21.1
25
26.1
22
15.8
8.1
2.1
CITY,Naha
19.1
19.2
21.3
24
26.4
29.2
31.3
30.9
29.9
27.5
24.2
20.9
コード
#!/usr/bin/perl

use CGI;
use GD::Graph::lines;

my @graph_data;  # グラフオブジェクト用配列
my @city_names;  # 都市名配列
my @label;       # ラベル配列
my $cur_city;    # カレント都市名

# ログファイルを読み込む #
my $logfile = '../data/temperture.txt';
if(!-f $logfile){
  print "Log file $logfile Notfound.";
  exit(1);
}

# ヘッダの送信 #
my $oCGI = CGI->new();
print $oCGI->header(-type =>"image/png");

open(FH,"<$logfile");

while(){
   chomp;
   # データをカンマ区切りで代入 #
   my($tag,$rec) = split(",",$_);

   ## 先頭カラムを判定 ##
   # 都市開始行 #
   if($tag eq 'CITY'){

     # 前処理都市データをグラフ配列にpush #
     if(@city_names>0){
       push(@graph_data,\@{$cur_city});
     }

     # ラベルデータをグラフ配列にpush #
     if($cur_city eq 'LABEL'){
       push(@graph_data,\@label);
     }

     # カレント 都市設定 #
     $cur_city=$rec;
     @{$cur_city}=();
     push(@city_names,$rec);

   # ラベル行処理 #
   }elsif($tag eq 'LABEL'){
     $cur_city='LABEL';

   # データ行処理 #
   }else{
     if($cur_city eq 'LABEL'){
       push(@label,$tag);
     }else{
       push(@{$cur_city},$tag);
     }
   }
}
close(FH);

# 最終都市のデータをグラフ配列にpush #
push(@graph_data,\@{$cur_city});

# オブジェクトの作成 #
my $graph = GD::Graph::lines->new(550,350);

# グラフオプションの設定 #
$graph->set( title         => "Average Temperture",
             y_label       => "Celsius",
             line_width    => 2,
             y_max_value   => 40,
             y_min_value   => -10,
             y_tick_number => 5);

# 凡例 #
$graph->set_legend(@city_names);

# グラフを出力 #
print $graph->plot(\@graph_data)->png();

exit(0);



戻る

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google