ChartDirector Ver 4.1 (PHP Edition Edition)

Pie with Small Sectors




This example demonstrates how "side label layout" can avoid sector labels from overlapping. It also demonstrates metallic background colors, and sector labels with glass shading effect and rounded corners.

Note that in the above chart, there are a number of small sectors. With the "side label layout" method selected using PieChart.setLabelLayout, ChartDirector automatically shifts the labels up and down to avoid overlapping.

This example demonstrates a technique for further improving sector label layout by adjusting the start angle of the first sector using PieChart.setStartAngle.

If a pie chart may contain a lot of small sectors crowded together (common if the sectors are in descending or ascending order), the labels may become very crowded and need to be shifted far away to avoid overlapping.

In this case, label layout will be optimal (with the least shifting required) if the small sectors happen to lie almost horizontally.

For example, if the data is in ascending order (small sectors at the beginning), you may use a start angle of 45 degrees with clockwise sector layout. This will put the small sectors at approximately 45 - 135 degrees, which are around the horizontal position.

Similarly, if the data is in descending order (like this example), you may use a start angle of 135 degrees with clockwise sector layout to achieve similar effect.

Source Code Listing

[File: phpdemo/smallsectorpie.php]
<?php
require_once("../lib/phpchartdir.php");

# The data for the pie chart
$data = array(35, 30, 25, 7, 6, 5, 4, 3, 2, 1);

# The labels for the pie chart
$labels = array("Labor", "Production", "Facilities", "Taxes", "Misc", "Legal",
    "Insurance", "Licenses", "Transport", "Interest");

# Create a PieChart object of size 560 x 270 pixels, with a golden background and a 1
# pixel 3D border
$c = new PieChart(560, 270, goldColor(), -1, 1);

# Add a title box using 15 pts Times Bold Italic font and metallic pink background
# color
$textBoxObj = $c->addTitle("Project Cost Breakdown", "timesbi.ttf", 15);
$textBoxObj->setBackground(metalColor(0xff9999));

# Set the center of the pie at (280, 135) and the radius to 110 pixels
$c->setPieSize(280, 135, 110);

# Draw the pie in 3D with 20 pixels 3D depth
$c->set3D(20);

# Use the side label layout method
$c->setLabelLayout(SideLayout);

# Set the label box background color the same as the sector color, with glass effect,
# and with 5 pixels rounded corners
$t = $c->setLabelStyle();
$t->setBackground(SameAsMainColor, Transparent, glassEffect());
$t->setRoundedCorners(5);

# Set the border color of the sector the same color as the fill color. Set the line
# color of the join line to black (0x0)
$c->setLineColor(SameAsMainColor, 0x000000);

# Set the start angle to 135 degrees may improve layout when there are many small
# sectors at the end of the data array (that is, data sorted in descending order). It
# is because this makes the small sectors position near the horizontal axis, where
# the text label has the least tendency to overlap. For data sorted in ascending
# order, a start angle of 45 degrees can be used instead.
$c->setStartAngle(135);

# Set the pie data and the pie labels
$c->setData($data, $labels);

# output the chart
header("Content-type: image/png");
print($c->makeChart2(PNG));
?>