perl-製作統計圖(折線)

#!/use/bin/perl

=pod
   製作MAMC-DMZ區域的TOP5統計圖
=cut
use utf8;
use Encode;
use SVG::TT::Graph::Line;

#database info
use DBI;
use File::Find;
use Data::Dumper;
use POSIX qw(strftime);
my $date =  strftime("%Y-%m-%d", localtime(time));#tody

my %mysql = (
   'dbname' => "test",
   'host'   => "127.0.0.1",
   'port'   => 3306,
   'user'   => 'report',
   'pass'   => 'test',
);

#mysql connection
my $database ="DBI:mysql:$mysql{'dbname'}";
my $dbh = DBI->connect($database,$mysql{'user'},$mysql{'pass'}) or die("Could not make connection to database:$DBI::errstr");
   $dbh->do("SET character_set_client='utf8'");
   $dbh->do("SET character_set_connection='utf8'");
   $dbh->do("SET character_set_results='utf8'");

my (@fields,%month);  #/存儲日期信息/#
my (@cname);   #/存儲中文字段名稱/#
my (@data_t_1,@data_t_2,@data_t_3,@data_t_4,@data_t_5,@data_t_6,@data_t_7); #/取到原始數據/#

#squery info
$sth = $dbh->prepare("SELECT sdate,apimap,scount FROM v_dmztop5");
$sth->execute() or die "無法執行SQL語句:$dbh->errstr";
#read info
while(my @data = $sth->fetchrow_array())
{
   #print "$data[0],$data[1],$data[2]\n";
   $data_array{"Y:$data[0]"}{$data[1]}="$data[2]";
   $month{$data[0]}='1';
   $cname{$data[1]}='1';
}
#創建日期池
for (sort keys %month)
{
    push @fields,"$_";
}

my $nu;
for my $va (sort keys %data_array)
{
    $nu++;
    for my $vb (sort keys %{ $data_array{$va} })
    {
      print "$nu\n";
      print "$va->$vb=>$data_array{$va}{$vb}\n";
      push @cname,"$vb" if $nu == 1;
      push @data_t_1,"0$data_array{$va}{$vb}" if $nu == 1;
      push @data_t_2,"0$data_array{$va}{$vb}" if $nu == 2;
      push @data_t_3,"0$data_array{$va}{$vb}" if $nu == 3;
      push @data_t_4,"0$data_array{$va}{$vb}" if $nu == 4;
      push @data_t_5,"0$data_array{$va}{$vb}" if $nu == 5;
      push @data_t_6,"0$data_array{$va}{$vb}" if $nu == 6;
      push @data_t_7,"0$data_array{$va}{$vb}" if $nu == 7;
    }
    print "\n";
}

#/xy圓點值/#
my @str1=("$data_t_1[0]","$data_t_2[0]","$data_t_3[0]","$data_t_4[0]","$data_t_5[0]","$data_t_6[0]","$data_t_7[0]");
my @str2=("$data_t_1[1]","$data_t_2[1]","$data_t_3[1]","$data_t_4[1]","$data_t_5[1]","$data_t_6[1]","$data_t_7[1]");
my @str3=("$data_t_1[2]","$data_t_2[2]","$data_t_3[2]","$data_t_4[2]","$data_t_5[2]","$data_t_6[2]","$data_t_7[2]");
my @str4=("$data_t_1[3]","$data_t_2[3]","$data_t_3[3]","$data_t_4[3]","$data_t_5[3]","$data_t_6[3]","$data_t_7[3]");
my @str5=("$data_t_1[4]","$data_t_2[4]","$data_t_3[4]","$data_t_4[4]","$data_t_5[4]","$data_t_6[4]","$data_t_7[4]");

#xy軸座標信息#
my $graph = SVG::TT::Graph::Line->new(
  {
      'height'            => '500',
      'width'             => '900',
      'show_data_values'  => 0, #數值顯示,0關閉,1開啓
      'scale_integers'    => 1,
      'show_y_title'      => 1, #y座標標題顯示,0關閉,1開啓
      'show_x_title'      => 1, #x座標標題顯示,0關閉,1開啓
      'y_title'           => encode("utf8",'接口調用量'),
      'x_title'           => encode("utf8",'接口調日期'),
      'show_graph_title'  => 0, #0關閉,1開啓
      'graph_title'       => 'MAMC-DMZ-TOP5',
      'key'               => 1,
      'key_position'      => 'bottom',
      'fields'            => \@fields,
  }
);

#數據引用
my @xy = (\@str1,\@str2,\@str3,\@str4,\@str5);
my $num;
for my $val (@xy)
{
    $num++;
    $graph->add_data(
    {
      'data'  => $val,
      'title' => "$cname[$num-1]",
    }
   );
}
open( my $fh, '>', "/home/mamc_report/report_file/mamc_dmztop5$date.svg" );
select $fh;
binmode $fh;
print $graph->burn();
close($fh);
$sth->finish();
$dbh->disconnect;
![這裏寫圖片描述](http://img.blog.csdn.net/20160119212039795)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章