
Imager::Graph::Pie - a tool for drawing pie charts on Imager images

use Imager::Graph::Pie;
my $chart = Imager::Graph::Pie->new;
# see Imager::Graph for options
my $img = $chart->draw(
data => [ $first_amount, $second_amount ],
size => 350);

Imager::Graph::Pie is intender to make it simple to use Imager to create good looking pie graphs.
Most of the basic layout and color selection is handed off to Imager::Graph.
Draws a pie graph onto a new image and returns the image.
You must at least supply a data parameter and should probably supply a labels parameter. If you supply a labels parameter, you must supply a font parameter.
The data parameter should be a reference to an array containing the data the pie graph should present.
The labels parameter is a reference to an array of labels, corresponding to the values in data.

As described in Imager::Graph you can enable extra features for your graph. The features you can use with pie graphs are:
all labels are presented as callouts
only show the percentage, not the labels.
adds the percentage of the pie to each label.
Additionally, arguments can be added to draw() :
adds a legend to your graph. Requires the labels parameter
labels each segment of the graph. If the label doesn't fit inside the segment it is presented as a callout.
adds the percentage of the pie to each label.
the segments are labels with their percentages only.
all labels are presented as callouts
the pie segments are outlined.
the pie is given a drop shadow.

The following style values are specific to pie charts:
Controlling callouts, the callout option:
The outline, line option controls the color of the pie segment outlines, if enabled with the outline feature.
Under pie:
The top level otherlabel setting controls the label for the "others" segment, default "(others)".

Assuming:
# from the Netcraft September 2001 web survey # http://www.netcraft.com/survey/ my @data = qw(17874757 8146372 1321544 811406 ); my @labels = qw(Apache Microsoft i_planet Zeus ); my $pie = Imager::Graph::Pie->new;
First a simple graph, normal size, no labels:
my $img = $pie->draw(data=>\@data)
or die $pie->error;
label the segments:
# error handling omitted for brevity from now on $img = $pie->draw(data=>\@data, labels=>\@labels, features=>'labels');
just percentages in the segments:
$img = $pie->draw(data=>\@data, features=>'labelspconly');
add a legend as well:
$img = $pie->draw(data=>\@data, labels=>\@labels,
features=>[ 'labelspconly', 'legend' ]);
and a title, but move the legend down, and add a dropshadow:
$img = $pie->draw(data=>\@data, labels=>\@labels,
title=>'Netcraft Web Survey',
legend=>{ valign=>'bottom' },
features=>[ qw/labelspconly legend dropshadow/ ]);
something a bit prettier:
$img = $pie->draw(data=>\@data, labels=>\@labels,
style=>'fount_lin', features=>'legend');
suitable for monochrome output:
$img = $pie->draw(data=>\@data, labels=>\@labels,
style=>'mono', features=>'legend');

These are used in the implementation of Imager::Graph, and are documented for debuggers and developers.
Consolidate segments that are too small into an 'others' segment.
Attempts to fit text into a pie segment with its center at ($cx, $cy) with the given radius, covering the angles $begin through $end.
Returns a list defining the bounding box of the text if it does fit.

Tony Cook <tony@develop-help.com>

Imager::Graph(3), Imager(3), perl(1)