ChartDirector 6.0 (Perl Edition)

Multi-Pie Chart


    

This example demonstrates drawing multiple pies with different data and colors. It also demonstrates putting labels on the sectors and using sector borders.

Source Code Listing

[Standalone Version] perldemo\multipie.pl
#!/usr/bin/perl

# In the sample code, the ChartDirector for Perl module is assumed to be in "../lib"
use File::Basename;
use lib (dirname($0)."/../lib") =~ /(.*)/;

use perlchartdir;

sub createChart
{
    my $chartIndex = shift;

    # The data for the pie chart
    my $data0 = [25, 18, 15];
    my $data1 = [14, 32, 24];
    my $data2 = [25, 23, 9];

    # The labels for the pie chart
    my $labels = ["Software", "Hardware", "Services"];

    # Create a PieChart object of size 180 x 160 pixels
    my $c = new PieChart(180, 160);

    # Set the center of the pie at (90, 80) and the radius to 60 pixels
    $c->setPieSize(90, 80, 60);

    # Set the border color of the sectors to white (ffffff)
    $c->setLineColor(0xffffff);

    # Set the background color of the sector label to pale yellow (ffffc0) with a black border
    # (000000)
    $c->setLabelStyle()->setBackground(0xffffc0, 0x000000);

    # Set the label to be slightly inside the perimeter of the circle
    $c->setLabelLayout($perlchartdir::CircleLayout, -10);

    # Set the title, data and colors according to which pie to draw
    if ($chartIndex == 0) {
        $c->addTitle("Alpha Division", "arialbd.ttf", 8);
        $c->setData($data0, $labels);
        $c->setColors2($perlchartdir::DataColor, [0xff3333, 0xff9999, 0xffcccc]);
    } elsif ($chartIndex == 1) {
        $c->addTitle("Beta Division", "arialbd.ttf", 8);
        $c->setData($data1, $labels);
        $c->setColors2($perlchartdir::DataColor, [0x33ff33, 0x99ff99, 0xccffcc]);
    } else {
        $c->addTitle("Gamma Division", "arialbd.ttf", 8);
        $c->setData($data2, $labels);
        $c->setColors2($perlchartdir::DataColor, [0x3333ff, 0x9999ff, 0xccccff]);
    }

    # Output the chart
    $c->makeChart("multipie$chartIndex.png")
}

createChart(0);
createChart(1);
createChart(2);

[CGI Version] perldemo_cgi\multipie.pl
#!/usr/bin/perl

# In the sample code, the ChartDirector for Perl module is assumed to be in "../lib"
use File::Basename;
use lib (dirname($0)."/../lib") =~ /(.*)/;

use perlchartdir;

# Get HTTP query parameters
use CGI;
my $query = new CGI;

# This script can draw different charts depending on the chartIndex
$chartIndex = int($query->param("img"));

# The data for the pie chart
my $data0 = [25, 18, 15];
my $data1 = [14, 32, 24];
my $data2 = [25, 23, 9];

# The labels for the pie chart
my $labels = ["Software", "Hardware", "Services"];

# Create a PieChart object of size 180 x 160 pixels
my $c = new PieChart(180, 160);

# Set the center of the pie at (90, 80) and the radius to 60 pixels
$c->setPieSize(90, 80, 60);

# Set the border color of the sectors to white (ffffff)
$c->setLineColor(0xffffff);

# Set the background color of the sector label to pale yellow (ffffc0) with a black border (000000)
$c->setLabelStyle()->setBackground(0xffffc0, 0x000000);

# Set the label to be slightly inside the perimeter of the circle
$c->setLabelLayout($perlchartdir::CircleLayout, -10);

# Set the title, data and colors according to which pie to draw
if ($chartIndex == 0) {
    $c->addTitle("Alpha Division", "arialbd.ttf", 8);
    $c->setData($data0, $labels);
    $c->setColors2($perlchartdir::DataColor, [0xff3333, 0xff9999, 0xffcccc]);
} elsif ($chartIndex == 1) {
    $c->addTitle("Beta Division", "arialbd.ttf", 8);
    $c->setData($data1, $labels);
    $c->setColors2($perlchartdir::DataColor, [0x33ff33, 0x99ff99, 0xccffcc]);
} else {
    $c->addTitle("Gamma Division", "arialbd.ttf", 8);
    $c->setData($data2, $labels);
    $c->setColors2($perlchartdir::DataColor, [0x3333ff, 0x9999ff, 0xccccff]);
}

# Output the chart
binmode(STDOUT);
print "Content-type: image/png\n\n";
print $c->makeChart2($perlchartdir::PNG);