http://qs321.pair.com?node_id=77327
Category: CGI programming
Author/Contact Info Joseph Harnish
big_joe1008@yahoo.com
Description: This is very similar to the Bar graph maker. But this one will do a Pie chart. The same parameters apply.
  • cols are the names of the values
  • vals are the corrisponding values

title is optional on this.
#!/usr/bin/perl
#################################################################
#   Author      Joseph Harnish        big_joe1008@yahoo.com        #
#   Date        5/1/2001                                        #
#                                                                #
#   This script is a wrapper for GD::Graph::Bars for use on     #
#    web pages.  It is a quicky that is used inside of an         #
#   IFRAME.                                                           
+           #
#                                                                #
#   Usage:  piegraph.pl?cols=A,B,C&vals=1,2,3                    #
#   It is required to have a "cols" and a "vals" but there are  #
#   options you can also add.  These options are:                    #
+   
#     title                                                           
+   #    
#################################################################
use GD::Graph::pie;
use CGI;

my $q = new CGI;
my $cols = $q->param("cols");
my $title = $q->param("title");
my $vals = $q->param("vals");
my @col = split(/\,/, $cols);
my @val = split(/\,/, $vals);
my $temp;

# Test the values comming in.
foreach (@val) {
  $temp += $_;
}
if($temp != 100){
  print $q->header;
  print "<h1>Error:  The values must add up to 100</h1>Your total was 
+$temp<br>\n";
  exit;
}

if($#col != $#val){
    print $q->header;
    print "<b><h1>Error:  Parameters are not balanced</h1></b>";
    exit;
}
#create and display the graph
my $graph = new GD::Graph::pie(200,200);
my @data = ([@col], [@val]);
$graph->set(title => "$title") if($title ne '');
$graph->set_label_font('ARIAL.TTF', 24);
$graph->set_value_font('ARIAL.TTF', 24);
print $q->header("image/png");
binmode STDOUT;
print $graph->plot(\@data)->png;