public function toObject() { $this->consolidateParameters(); $xAxisLabels = new OFC_Elements_Axis_X_Label_Set(); $xAxisLabels->set_labels($this->labels); $xAxisLabels->set_size(10); $xAxisLabels->set_colour('#444444'); $xAxisLabels->set_steps($this->stepsX); $xAxis = new OFC_Elements_Axis_X(); $xAxis->set_steps($this->stepsX); $xAxis->set_labels($xAxisLabels); $xAxis->set_colour('#CCCCCC'); $xAxis->set_grid_colour('#AAAAAA'); $this->chart->set_x_axis($xAxis); $yAxis = new OFC_Elements_Axis_Y(); $yAxis->set_range($this->min1, $this->max1); $yAxis->set_colour('#AAAAAA'); $yAxis->set_grid_colour('#AAAAAA'); $yAxis->set_steps($this->stepsY1); $this->chart->set_y_axis($yAxis); $yLegend = new OFC_Elements_Legend_Y($this->data1->getName()); //$this->chart->set_y_legend($yLegend); // does not work now // data 1 $this->chart->add_element($this->createGraph($this->data1)); if ($this->hasTwoDataLines()) { $yAxisRight = new OFC_Elements_Axis_Y_Right(); $yAxisRight->set_range($this->min2, $this->max2); $yAxisRight->set_colour('#AAAAAA'); $yAxisRight->set_steps($this->stepsY2); // $this->chart->set_y_axis_right($yAxisRight); $this->chart->add_element($this->createGraph($this->data2)); } return $this->chart; }
public function reg_data() { $_label = array('05-01', '05-02', '05-03', '05-04', '05-05', '05-06', '05-07', '05-08', '05-09', '05-10', '05-11', '05-12', '05-13', '05-14', '05-15'); $_value = array(1235, 1125, 1323, 1389, 1256, 1568, 1383, 1677, 1953, 1798, 2089, 2215, 1738, 2189, 2315); $_max_value = 2500; $this->load->library('OFC_Chart'); $title = new OFC_Elements_Title("日注册用户数(人)"); //创建图表类型对象 $element = new OFC_Charts_Bar_Glass(); //设置图标值 $element->set_values($_value); //$element->set_width( 2 ); //$element->set_dot_style(array('type'=>"solid-dot",'dot-size'=>5,'halo-size'=>1,'colour'=>'#3D5C56')); //设置动画 $element->set_on_show(array('type' => "pop-up", 'cascade' => 0.8, 'delay' => 0.1)); $element->set_colour("#009829"); //创建图表对象 $chart = new OFC_Chart(); $chart->set_title($title); //图表类型添加到图表 $chart->add_element($element); //x轴 $x_axis = new OFC_Elements_Axis_X(); $x_axis->set_labels(array('labels' => $_label)); $x_axis->set_steps(1); $chart->set_x_axis($x_axis); //y轴 $y_axis = new OFC_Elements_Axis_Y(); $y_axis->set_range(0, $_max_value, $_max_value / 10); $chart->set_y_axis($y_axis); //x 脚标 $x_legend = new OFC_Elements_Legend_X('日期'); $x_legend->set_style('{font-size: 20px; color: #778877}'); $chart->set_x_legend($x_legend); $chart->set_bg_colour('#ffffff'); echo $chart->toPrettyString(); }
public function chartDataAction() { // Disable layout and viewrenderer $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); // Get params $type = $this->_getParam('type'); $start = $this->_getParam('start'); $offset = $this->_getParam('offset', 0); $mode = $this->_getParam('mode'); $chunk = $this->_getParam('chunk'); $period = $this->_getParam('period'); $periodCount = $this->_getParam('periodCount', 1); //$end = $this->_getParam('end'); // Validate chunk/period if (!$chunk || !in_array($chunk, $this->_periods)) { $chunk = Zend_Date::DAY; } if (!$period || !in_array($period, $this->_periods)) { $period = Zend_Date::MONTH; } if (array_search($chunk, $this->_periods) >= array_search($period, $this->_periods)) { die('whoops'); return; } // Validate start if ($start && !is_numeric($start)) { $start = strtotime($start); } if (!$start) { $start = time(); } // Fixes issues with month view Zend_Date::setOptions(array('extend_month' => true)); // Get timezone $timezone = Engine_Api::_()->getApi('settings', 'core')->getSetting('core_locale_timezone', 'GMT'); $viewer = Engine_Api::_()->user()->getViewer(); if ($viewer && $viewer->getIdentity() && !empty($viewer->timezone)) { $timezone = $viewer->timezone; } // Make start fit to period? $startObject = new Zend_Date($start); $startObject->setTimezone($timezone); $partMaps = $this->_periodMap[$period]; foreach ($partMaps as $partType => $partValue) { $startObject->set($partValue, $partType); } // Do offset if ($offset != 0) { $startObject->add($offset, $period); } // Get end time $endObject = new Zend_Date($startObject->getTimestamp()); $endObject->setTimezone($timezone); $endObject->add($periodCount, $period); $endObject->sub(1, Zend_Date::SECOND); // Subtract one second // Get data $statsTable = Engine_Api::_()->getDbtable('statistics', 'core'); $statsSelect = $statsTable->select()->where('type = ?', $type)->where('date >= ?', gmdate('Y-m-d H:i:s', $startObject->getTimestamp()))->where('date < ?', gmdate('Y-m-d H:i:s', $endObject->getTimestamp()))->order('date ASC'); $rawData = $statsTable->fetchAll($statsSelect); // Now create data structure $currentObject = clone $startObject; $nextObject = clone $startObject; $data = array(); $dataLabels = array(); $cumulative = 0; $previous = 0; do { $nextObject->add(1, $chunk); $currentObjectTimestamp = $currentObject->getTimestamp(); $nextObjectTimestamp = $nextObject->getTimestamp(); $data[$currentObjectTimestamp] = $cumulative; // Get everything that matches $currentPeriodCount = 0; foreach ($rawData as $rawDatum) { $rawDatumDate = strtotime($rawDatum->date); if ($rawDatumDate >= $currentObjectTimestamp && $rawDatumDate < $nextObjectTimestamp) { $currentPeriodCount += $rawDatum->value; } } // Now do stuff with it switch ($mode) { default: case 'normal': $data[$currentObjectTimestamp] = $currentPeriodCount; break; case 'cumulative': $cumulative += $currentPeriodCount; $data[$currentObjectTimestamp] = $cumulative; break; case 'delta': $data[$currentObjectTimestamp] = $currentPeriodCount - $previous; $previous = $currentPeriodCount; break; } $currentObject->add(1, $chunk); } while ($currentObject->getTimestamp() < $endObject->getTimestamp()); // Reprocess label $labelStrings = array(); $labelDate = new Zend_Date(); foreach ($data as $key => $value) { $labelDate->set($key); $labelStrings[] = $this->view->locale()->toDate($labelDate, array('size' => 'short')); //date('D M d Y', $key); } // Let's expand them by 1.1 just for some nice spacing $minVal = min($data); $maxVal = max($data); $minVal = floor($minVal * ($minVal < 0 ? 1.1 : 1 / 1.1) / 10) * 10; $maxVal = ceil($maxVal * ($maxVal > 0 ? 1.1 : 1 / 1.1) / 10) * 10; // Remove some labels if there are too many $xlabelsteps = 1; if (count($data) > 10) { $xlabelsteps = ceil(count($data) / 10); } // Remove some grid lines if there are too many $xsteps = 1; if (count($data) > 100) { $xsteps = ceil(count($data) / 100); } // Create base chart require_once 'OFC/OFC_Chart.php'; // Make x axis labels $x_axis_labels = new OFC_Elements_Axis_X_Label_Set(); $x_axis_labels->set_steps($xlabelsteps); $x_axis_labels->set_labels($labelStrings); // Make x axis $labels = new OFC_Elements_Axis_X(); $labels->set_labels($x_axis_labels); $labels->set_colour("#416b86"); $labels->set_grid_colour("#dddddd"); $labels->set_steps($xsteps); // Make y axis $yaxis = new OFC_Elements_Axis_Y(); $yaxis->set_range($minVal, $maxVal); $yaxis->set_colour("#416b86"); $yaxis->set_grid_colour("#dddddd"); // Make data $graph = new OFC_Charts_Line(); $graph->set_values(array_values($data)); $graph->set_colour("#5ba1cd"); // Make title $locale = Zend_Registry::get('Locale'); $translate = Zend_Registry::get('Zend_Translate'); $titleStr = $translate->_('_CORE_ADMIN_STATS_' . strtoupper(trim(preg_replace('/[^a-zA-Z0-9]+/', '_', $type), '_'))); $title = new OFC_Elements_Title($titleStr . ': ' . $this->view->locale()->toDateTime($startObject) . ' to ' . $this->view->locale()->toDateTime($endObject)); $title->set_style("{font-size: 14px;font-weight: bold;margin-bottom: 10px; color: #777777;}"); // Make full chart $chart = new OFC_Chart(); $chart->set_bg_colour('#ffffff'); $chart->set_x_axis($labels); $chart->add_y_axis($yaxis); $chart->add_element($graph); $chart->set_title($title); // Send $this->getResponse()->setBody($chart->toPrettyString()); }
for ($i = 0; $i < 6.2; $i += 0.2) { $tmp = sin($i) * 1.9; $data[] = $tmp; } require_once 'OFC/OFC_Chart.php'; $chart = new OFC_Chart(); $chart->set_title(new OFC_Elements_Title('Area Chart')); // // Make our area chart: // $area = new OFC_Charts_Area_Hollow(); // set the circle line width: $area->set_width(1); $area->set_values($data); // add the area object to the chart: $chart->add_element($area); $y_axis = new OFC_Elements_Axis_Y(); $y_axis->set_range(-2, 2, 2); $y_axis->labels = null; $y_axis->set_offset(false); $x_axis = new OFC_Elements_Axis_X(); $x_axis->labels = $data; $x_axis->set_steps(2); $x_labels = new OFC_Elements_Axis_X_Label_Set(); $x_labels->set_steps(4); $x_labels->set_vertical(); // Add the X Axis Labels to the X Axis $x_axis->set_labels($x_labels); $chart->add_y_axis($y_axis); $chart->x_axis = $x_axis; echo $chart->toPrettyString();
public function draw_summary_chart($gb_captions) { $f = $this->init_module(Libs_OpenFlashChart::module_name()); //row summary numeric $f2 = $this->init_module(Libs_OpenFlashChart::module_name()); //row summary currency $fc = $this->init_module(Libs_OpenFlashChart::module_name()); //columns summary numeric $fc2 = $this->init_module(Libs_OpenFlashChart::module_name()); //columns summary currency $title = new OFC_Elements_Title("Summary by row"); $f->set_title($title); $f2->set_title($title); if (!empty($this->categories)) { $labels = array(); $labels_c = array(); foreach ($this->categories as $q => $c) { if ($this->format[$c] == 'currency') { $labels_c[] = strip_tags($c); } else { $labels[] = strip_tags($c); } } $x_ax = new OFC_Elements_Axis_X(); $x_ax->set_labels_from_array($labels); $f->set_x_axis($x_ax); $x_ax = new OFC_Elements_Axis_X(); $x_ax->set_labels_from_array($labels_c); $f2->set_x_axis($x_ax); } $title = new OFC_Elements_Title("Summary by column"); $fc->set_title($title); $fc2->set_title($title); $labels = array(); foreach ($gb_captions as $cap) { $labels[] = $cap['name']; } $x_ax = new OFC_Elements_Axis_X(); $x_ax->set_labels_from_array($labels); $fc->set_x_axis($x_ax); $fc2->set_x_axis($x_ax); $max = 5; $max2 = 5; $maxc = 5; $maxc2 = 5; $curr = false; $num = false; $col_total = array(); $color = 0; foreach ($this->ref_records as $k => $r) { $results = call_user_func($this->display_cell_callback, $r); $ref_rec = call_user_func($this->ref_record_display_callback, $r, true); $bar = new OFC_Charts_Bar_Glass(); $bar->set_colour(self::$colours[$color % count(self::$colours)]); $color++; $bar->set_key(strip_tags($ref_rec), 10); if (empty($this->categories)) { $total = 0; $i = 0; foreach ($results as &$res_ref) { if (is_array($res_ref)) { $res_ref = array_pop($res_ref); } $val = strip_tags($res_ref); $total += $val; if (!isset($this->cols_total[$i])) { $this->cols_total[$i] = array(); } $this->cols_total[$i][0] += $val; $i++; } $bar->set_values(array($total)); if ($this->format == 'currency') { if ($total > $max2) { $max2 = $total; } $f2->add_element($bar); $curr = true; } else { if ($total > $max) { $max = $total; } $f->add_element($bar); $num = true; } } else { $bar_c = new OFC_Charts_Bar_Glass(); $bar_c->set_colour(self::$colours[$color % count(self::$colours)]); $bar_c->set_key(strip_tags($ref_rec), 10); $arr = array(); $arr_c = array(); foreach ($this->categories as $q => $c) { $total = 0; if (!isset($this->cols_total[$c])) { $this->cols_total[$c] = array(); } $i = 0; foreach ($results as $v) { if (is_array($v[$c])) { $v[$c] = reset($v[$c]); } $val = (double) strip_tags($v[$c]); $total += $val; if (!isset($this->cols_total[$c][$i])) { $this->cols_total[$c][$i] = 0; } $this->cols_total[$c][$i] += $val; $i++; } if ($this->format[$c] == 'currency') { $arr_c[] = $total; if ($max2 < $total) { $max2 = $total; } } else { $arr[] = $total; if ($max < $total) { $max = $total; } } } if (!empty($arr)) { $bar->set_values($arr); $f->add_element($bar); $num = true; } if (!empty($arr_c)) { $bar_c->set_values($arr_c); $f2->add_element($bar_c); $curr = true; } } } if ($num) { $y_ax = new OFC_Elements_Axis_Y(); $y_ax->set_range(0, $max); $y_ax->set_steps($max / 10); $f->set_y_axis($y_ax); $f->set_width(950); $f->set_height(400); $this->display_module($f); print '<br>'; } if ($curr) { $y_ax = new OFC_Elements_Axis_Y(); $y_ax->set_range(0, $max2); $y_ax->set_steps($max2 / 10); $f2->set_y_axis($y_ax); $f2->set_width(950); $f2->set_height(400); $this->display_module($f2); print '<br>'; } if (empty($this->categories)) { $bar = new OFC_Charts_Bar_Glass(); $bar->set_colour(self::$colours[0]); $bar->set_key('Total', 10); $mm = 5; $values = array(); foreach ($this->cols_total as $val) { $rval = $val[0]; if ($mm < $rval) { $mm = $rval; } $values[] = $rval; } $bar->set_values($values); if ($this->format == 'currency') { $maxc2 = $mm; $fc2->add_element($bar); } else { $maxc = $mm; $fc->add_element($bar); } } else { $i = 0; foreach ($this->cols_total as $k => $arr) { $bar = new OFC_Charts_Bar_Glass(); $bar->set_colour(self::$colours[$i % count(self::$colours)]); $bar->set_key(strip_tags($k), 10); $bar->set_values($arr); $mm = 5; foreach ($arr as $val) { if ($mm < $val) { $mm = $val; } } if ($this->format[$k] == 'currency') { if ($mm > $maxc2) { $maxc2 = $mm; } $fc2->add_element($bar); } else { if ($mm > $maxc) { $maxc = $mm; } $fc->add_element($bar); } $i++; } } if ($num) { $y_ax = new OFC_Elements_Axis_Y(); $y_ax->set_range(0, $maxc); $y_ax->set_steps($maxc / 10); $fc->set_y_axis($y_ax); $fc->set_width(950); $fc->set_height(400); $this->display_module($fc); print '<br>'; } if ($curr) { $y_ax = new OFC_Elements_Axis_X(); $y_ax->set_range(0, $maxc2); $y_ax->set_steps($maxc2 / 10); $fc2->set_y_axis($y_ax); $fc2->set_width(950); $fc2->set_height(400); $this->display_module($fc2); print '<br>'; } }
/** * $array['title'] * $array['legend_y'] * $array['legend_x'] * $array['values'] * $array['values_key'] * $array['range_max'] * $array['range_step'] * @param $array * @return unknown_type */ function create_chart_data($array) { if (!$array) { return; } require_once 'OFC/OFC_Chart.php'; $chart = new OFC_Chart(); $chart->set_bg_colour('#ffffff'); $title = new OFC_Elements_Title($array['title']); $title->set_style('{color: #567300; font-size: 16px; font-weight:bold;}'); $chart->set_title($title); $yl = new OFC_Elements_Legend_Y($array['legend_y']); $yl->set_style('{font-size:18px;}'); $chart->set_y_legend($yl); $xl = new OFC_Elements_Legend_X($array['legend_x']); $xl->set_style('{font-size:18px;color:#Ff0}'); $chart->set_x_legend($xl); $elements = array(); $colors = array('', '#CC00AA', '#9C48F0', '#b0de09', '#0d8ecf', '#ff6600', '#fcd202', '#E2EBFF', '#AAAAAA'); foreach ($array['values'] as $k => $v) { ksort($v, SORT_STRING); $line = new OFC_Charts_Line(); $line->set_key($array['values_key'][$k], 12); $colors[$k] ? $line->set_colour($colors[$k]) : ''; $line->set_values(array_values($v)); $default_dot = new OFC_Charts_Line_Dot(); $default_dot->tooltip('#x_label#<br>#val#'); $line->set_default_dot_style($default_dot); $elements[] = $line; $array['values'][$k] =& $v; } foreach ($elements as $element) { $chart->add_element($element); } $x = new OFC_Elements_Axis_X(); $x->colour = '#909090'; $x_axis_labels = new OFC_Elements_Axis_X_Label_Set(); $x->set_steps($array['show_step']); $x_axis_labels->set_steps($array['show_step']); if (is_array($array['values'][0])) { $keys = array_keys($array['values'][0]); } else { $keys = array_keys($array['values']); } $x_axis_labels->set_labels($keys); $x_axis_labels->set_size(12); $x_axis_labels->set_colour('#Ff0'); $x_axis_labels->set_rotate('-45'); $x->set_labels($x_axis_labels); $chart->set_x_axis($x); $y = new OFC_Elements_Axis_Y(); $range_min = isset($array['range_min']) ? $array['range_min'] : 0; $y->set_range($range_min, $array['range_max'], $array['range_step']); $chart->set_y_axis($y); return $chart->toPrettyString(); }