您的位置:首页 > 其它

perl-制作统计图(折线)

2016-01-19 21:21 274 查看
#!/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_
c734
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  统计图