pie_data = []; } public function getRequiredSeries() { return [ 'label' => false, 'value' => true, 'color' => false, 'style' => false ]; } public function _handleData($data) { $elements = count($data['value']); if (! isset($data['color'])) { $data['color'] = []; for ($i = 0; $elements > $i; ++$i) { $data['color'][] = $this->_getColor(); } } if (! isset($data['style'])) { for ($i = 0; $elements > $i; ++$i) { $data['style'][] = 'FillStroke-' . $data['color'][$i]; } } if (isset($data['label'])) { foreach ($data['label'] as $key => $label) { $this->addLegend($data['color'][$key], $label); } } $total = array_sum($data['value']); foreach ($data['value'] as $key => $value) { if (is_numeric($value)) { $this->pie_data[] = [$data['style'][$key], $value / $total * 360]; } } return true; } public function _drawContent(&$renderer) { $layout = $this->_layout(); $centerX = $layout['pie-center-x']; $centerY = $layout['pie-center-y']; $radius = $layout['pie-radius']; $base = 0; foreach ($this->pie_data as $info) { list($style, $degree) = $info; $renderer->drawPie( $centerX, $centerY, $radius, $base, $base + $degree, $renderer->getStyle($style) ); $base += $degree; } } public function _drawLegendBox(&$renderer, $color) { $renderer->drawRectangle(0, 0, 1, 1, $renderer->getStyle("FillStroke-$color")); } public function _default() { return array_merge( parent::_default(), [ 'pie-center-x' => 0.5, 'pie-center-y' => 0.5, 'pie-radius' => 0.4 ] ); } }