Perl GD::Graph::lines

May 11th, 2007 | Categories: Boring | Tags:

Perl使用GD::Graph::lines可以画线状图,通过一些参数设置,可以画出实用的图片


Perl代码

sub drawpicture{
my $fn = shift; #data array
my $xn = shift; #Metric Name
my $xnum=10;    #xnum control number of lable on X

#agaodays is days range

if ( $agodays < 0.5 )
{ $xnum=$agodays*24*4; }
elsif ( $agodays < 1 )
{ $xnum=12; }
elsif ( $agodays <= 2 )
{ $xnum= 24; }
elsif ( $agodays <= 7 )
{ $xnum=30; }
elsif ( $agodays <= 14 )
{ $xnum=60; }
elsif ( $agodays <= 30)
{ $xnum=90; }

my $filename=picture_name;

my @data  = read_data($fn);
my $my_graph;
$my_graph = new GD::Graph::lines(800+$agodays*150,350);

$my_graph->set(
long_ticks      => 1,
tick_length=>0.3,
x_label => ‘Days in statspack’,
y_label => $xn,
title => ‘Chart of ‘.$xn,
y_tick_number => 8,
x_tick_number => $xnum,
x_number_format => \&x_format,
x_min_value => $minvalue-1,
x_max_value => $maxvalue,
y_max_value => $ymaxvalue,
y_min_value => 0,
y_number_format => \&y_format ,
box_axis => 0,
line_width => 4,
dclrs => [ qw(dgreen dgreen ) ] ,
r_margin => 1,
x_labels_vertical => 1,
transparent => 0,
boxclr=>’black’,
shadow_depth=>4,
labelclr=>’black’,
axislabelclr=>’black’,
legendclr=>’dblue’
);
$my_graph->set_text_clr(”black”);
$my_graph->set_title_font([gdMediumBoldFont,’verdana’, ‘arial’], 18);
$my_graph->set_values_font([gdMediumBoldFont,’verdana’, ‘arial’], 12);
$my_graph->set_x_axis_font([gdMediumBoldFont,’verdana’, ‘arial’], 18);
$my_graph->set_y_axis_font([gdMediumBoldFont,’verdana’, ‘arial’], 18);
$my_graph->set_x_label_font([gdMediumBoldFont,’verdana’, ‘arial’], 12);
$my_graph->set_y_label_font([gdMediumBoldFont,’verdana’, ‘arial’], 12);
$my_graph->set_legend_font([gdMediumBoldFont,’verdana’, ‘arial’], 18);
$my_graph->set_legend(’Show ‘.$xn.’ metric’);
$my_graph->plot(\@data);
save_chart($my_graph, $filename);
}

sub x_format
{
my $value = shift;
my $ret;
my $tm;
if ($value >= 0)
{
$tm = localtime($value);
$ret = sprintf(”%s”, substr(scalar(localtime($value)),0,16));
}
return $ret;
}

sub y_format
{
my $value = shift;
my $ret;
if ($value >= 0)
{
$ret = sprintf(”%d”, int($value));
}
return $ret;
}

my $minvalue;
my $maxvalue;
my $ymaxvalue;

sub read_data
{
my $fn = shift;
my @d = ();
my ($t1,$t2,$t3);
my $i;
$i=0;
$ymaxvalue = 0;
foreach $row ( @$fn ) {
$t1= @$row[0];
$t2= @$row[2];
$t3= @$row[3];
$i=$i+1;
unshift @{$d[0]}, $t1;
unshift @{$d[1]}, $t3;
if ($i==1){
$minvalue= $t1;
}
if ($t3>$ymaxvalue) {
$ymaxvalue=$t3;
}
}
$maxvalue=$t1+1000;
$ymaxvalue= $ymaxvalue*1.2 ;
return @d;
}

sub save_chart
{
my $chart = shift or die “Need a chart!”;
my $name = shift or die “Need a name!”;
local(*OUT);
my $ext = $chart->export_format;
open(OUT, “>../htdocs/$name.$ext”) or
die “Cannot open $name.$ext for write: $!”;
binmode OUT;
print OUT $chart->gd->$ext();
close OUT;
&chartthtml($name.”.”.$ext);
}

sub chartthtml
{
my $picname= shift;
printf “<br/><img src=../$picname border=’0′ alt=”>”;
printf “<br/>”;
}

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
No comments yet.