PEAR is archived and read-only

This mirror preserves historical PEAR package releases and metadata so existing references remain available.

Home » Images » Image_Graph » Bug #4333

Legend division by zero error on PieChart

Details

Submitted2005-05-12 08:24 UTC
Fromattb2 at fw dot hu
Assignednosey
StatusClosed
PackageImage_Graph
PHP Version4.3.10
OSDebian Sarge
Roadmaps(Not assigned)

Comments

[2005-05-12 08:24 UTC] attb2 at fw dot hu

Description:
------------
If I want to display a Legend from a PieChart Image_Graph throws a
"division by zero" error.

I traced down this error:
/Graph/Plot.php
function _legendSample($x, $y, &$font) { Line: 719
[...]
$point = $this->_getMarkerData($point, $nextPoint, $prevPoint, $i);
[...]
}

In this method calling '$i' variable has no value! (Not initialized.)

Example is below. (Example is assembled from tutorial and
GraphPite site informations.)

Thanks

Attila Szuts

Reproduce code:
---------------
<?php

require_once("Image/Graph.php");

// -----------------------------------------------------------------------------

$startdate = date('Y-m-01');
$enddate = date('Y-m-d');
$month = date('Y-m');

$total_income = 541; // Income
$total_outcome = 19; // Outcome

// -----------------------------------------------------------------------------
// Graph.

$Graph =& new Image_Graph(400, 300);

// Font.
$Arial =& $Graph->addFont(new Image_Graph_Font_TTF("arial.ttf"));
$Arial->setSize(11);

// Cimke font
$ArialSolid =& $Graph->addFont(new Image_Graph_Font_TTF("arial.ttf"));
$ArialSolid->setSize(10);

$Graph->add(
new Image_Graph_Layout_Vertical(
new Image_Graph_Layout_Vertical(
new Image_Graph_Title(sprintf("Income / Outcome %s (Ft)", $month), $Arial),
$PlotArea = new Image_Graph_Plotarea(),
5
),
$Legend = new Image_Graph_Legend(), // Legend
70
)
);
$Graph->hideLogo();
$PlotArea->hideAxis();

// Legend
$Legend->setPlotArea($PlotArea);
//$Legend->setFillColor(IMAGE_GRAPH_WHITE);
//$Legend->setFont($ArialSolid);

// Adatok.
//$DataSet =& new Image_Graph_Dataset_Random(10, 2, 15, true);
$DataSet =& new Image_Graph_Dataset_Trivial();
$DataSet->addPoint('Income', $total_income);
$DataSet->addPoint('Outcome', $total_outcome);
$Plot =& $PlotArea->addPlot(new Image_Graph_Plot_Pie($DataSet));

// create a X data value marker
$Marker =& $Plot->add(new Image_Graph_Marker_Value(IMAGE_GRAPH_VALUE_X));
$Marker->setFont($ArialSolid);

// fill it with white
$Marker->setFillColor(IMAGE_GRAPH_WHITE);
// and use black border
$Marker->setBorderColor(IMAGE_GRAPH_BLACK);
// create a pin-point marker type
$PointingMarker =& $Plot->add(new Image_Graph_Marker_Pointing_Angular(30, $Marker));
// and use the marker on the plot
$Plot->setMarker($PointingMarker);

$Plot->Radius = 2;
$Plot->setLineColor(IMAGE_GRAPH_GRAY);

$GREEN =& $Graph->newColor(IMAGE_GRAPH_GREEN, 100);
$RED =& $Graph->newColor(IMAGE_GRAPH_RED, 100);

$FillArray =& new Image_Graph_Fill_Array();
$Plot->setFillStyle($FillArray);
$FillArray->add($GREEN);
$FillArray->add($RED);

$Graph->done();

// -----------------------------------------------------------------------------

?>

Expected result:
----------------
A nice Piechart with Legends.
If you comment out the
$Legend->setPlotArea($PlotArea);
line a piechart will be displayed. (without Legend)

Actual result:
--------------
Warning: Division by zero in /mnt/work/lotimex/web/Graphs/Image/Graph/Plot/Pie.php on line 63

[2005-05-17 21:15 UTC] pear dot nosey at veggerby dot dk

This bug has been fixed in CVS.

In case this was a documentation problem, the fix will show up at the
end of next Sunday (CET) on pear.php.net.

In case this was a pear.php.net website problem, the change will show
up on the website in short time.

Thank you for the report, and for helping us make PEAR better.