/** * This function needs to do some funky stuffs with the data series, because * the chd parameter of scatter charts work quite differently. * chd=<x_values>|<y_values>[|<optional_point_sizes>] * * So basically each point must be split into 3 values, placed on 3 GoogleChartData objects. */ protected function compute(array &$q) { $old_data = $this->data; $colors = array(); // rebuild a set of 3 GoogleChartData $series_x = array(); $series_y = array(); $series_size = array(); $legends = array(); foreach ($this->data as $i => $data) { $colors[] = $data->computeChco(); $legends[] = $data->getLegend(); $data_x = array(); $data_y = array(); $data_size = array(); foreach ($data->getValues() as $d) { $data_x[] = $d[0]; $data_y[] = $d[1]; $data_size[] = isset($d[2]) ? $d[2] : 10; } $series_x[] = $data_x; $series_y[] = $data_y; $series_size[] = $data_size; } $series_x = self::interlace($series_x); $series_y = self::interlace($series_y); $series_size = self::interlace($series_size); $series_x = new GoogleChartData($series_x); $series_y = new GoogleChartData($series_y); $series_size = new GoogleChartData($series_size); $this->data = array($series_x, $series_y, $series_size); $this->setAutoScale(false); // rebuild the legends $series_x->setLegends($legends); // compute parent::compute($q); unset($q['chds']); // DEBUG $this->chco = implode('|', $colors); $this->data = $old_data; }
<?php require '../lib/GoogleVennDiagram.php'; //~ $chart = new GoogleVennDiagram(300, 150); //~ $data = new GoogleChartData(array(10,10)); //~ $data->setColor(array('FF0000', '00FF00')); //~ $data->setLegends(array('A','B')); //~ $chart->addData($data); //~ $chart->setIntersectAB(1); //~ var_dump($chart->getQuery()); //~ printf('<iframe src="%s" width="500" height="500"></iframe>',$chart->getValidationUrl()); //~ echo $chart->toHtml(); //~ unset($chart); $chart = new GoogleVennDiagram(300, 150); $data = new GoogleChartData(array(10, 20, 30)); $data->setColor(array('FF0000', '00FF00', '0000FF')); $data->setLegends(array('A', 'B', 'C')); $data->setLabels(array('A', 'B', 'C')); $chart->addData($data); $chart->setIntersectAB(1); $chart->setIntersectAC(2); $chart->setIntersectBC(3); var_dump($chart->getQuery()); printf('<iframe src="%s" width="500" height="500"></iframe>', $chart->getValidationUrl()); echo $chart->toHtml(); //~ echo $chart;