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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值