ChartDirector 7.0 (Perl Edition)
Tree Map Colors
Source Code Listing
#!/usr/bin/perl
# The ChartDirector for Perl module is assumed to be in "../lib"
use File::Basename;
use lib (dirname($0)."/../lib") =~ /(.*)/;
use perlchartdir;
# The first level nodes of the tree map. There are 3 nodes.
my $allRegions = ["Alpha", "Beta", "Gamma"];
# Each first level node branches to become 7 second level nodes.
my $energy_types = ["Coal", "Oil", "Gas", "Nuclear", "Hydro", "Solar", "Wind"];
# Colors for the second level nodes.
my $colors = [0x222222, 0x666666, 0x884488, 0xcc0000, 0x3366cc, 0x33cc33, 0x77bbff];
# The data for the 3 groups of second level nodes
my $region0 = [0, 50, 70, 0, 60, 120, 140];
my $region1 = [200, 50, 30, 65, 60, 40, 40];
my $region2 = [0, 100, 70, 100, 60, 35, 40];
# Create a Tree Map object of size 600 x 520 pixels
my $c = new TreeMapChart(600, 520);
# Add a title to the chart
$c->addTitle("Energy Usage by Region", "Arial Bold Italic", 18);
# Set the plotarea at (10, 35) and of size 480 x 480 pixels
$c->setPlotArea(10, 35, 480, 480);
# Obtain the root of the tree map, which is the entire plot area
my $root = $c->getRootNode();
# Add first level nodes to the root. We do not need to provide data as they will be computed as the
# sum of the second level nodes.
$root->setData(undef, $allRegions);
# Add second level nodes to each of the first level node
$root->getNode(0)->setData($region0, $energy_types, $colors);
$root->getNode(1)->setData($region1, $energy_types, $colors);
$root->getNode(2)->setData($region2, $energy_types, $colors);
# Get the prototype (template) for the first level nodes.
my $nodeConfig = $c->getLevelPrototype(1);
# Set the label format for the nodes to show the label with 8pt Arial Bold font in semi-transparent
# black color (0x77000000). Put the text at the top left corner of the cell.
$nodeConfig->setLabelFormat("{label}", "Arial Bold", 18, 0x77ffffff, $perlchartdir::TopLeft);
# Set the border color to white (ffffff). Use 2 pixel thick flat border style.
$nodeConfig->setColors(-1, 0xffffff, perlchartdir::flatBorder(2));
# Get the prototype (template) for the second level nodes.
my $nodeConfig2 = $c->getLevelPrototype(2);
# Set the label format for the nodes to show the label and value with 8pt Arial Bold font. Put the
# text at the center of the cell.
$nodeConfig2->setLabelFormat("{label}<*br*>{value}MW", "Arial Bold", 8, 0xffffff,
$perlchartdir::Center);
# Set the border color to white (ffffff)
$nodeConfig2->setColors(-1, 0xffffff);
# Add a legend box at (500, 35) with 12pt Arial font and transparent background and border.
my $b = $c->addLegend(500, 35, 1, "Arial", 12);
$b->setBackground($perlchartdir::Transparent, $perlchartdir::Transparent);
# Add the legend keys for the colors
for(my $i = 0; $i < scalar(@$energy_types); ++$i) {
$b->addKey($energy_types->[$i], $colors->[$i]);
}
# Output the chart
$c->makeChart("treemapcolors.png");