Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 7.5k
Derek Jones edited this page Jul 5, 2012
·
21 revisions
Introduction
PHPlot is a graph library for dynamic scientific, business, and stock-market charts. PHPlot allows PHP developers to create pie charts, bar graphs, line graphs, point graphs, etc. For more detail information, please visit the official site :
Instructions Here are the following things need to be done in order to integrate PHPlot with CI:
- Download PHPlot source package from the official site,extract the downloaded file
- Create new directory for example named graph, place in under libraries directory of CI Installation.
- put the extracted files in the new directory(graph). The files are phplot.php, phplot_data.php, rgb.inc.php
- Create the new file named graph.php, place in libraries directory , with the following contents :
graph.php
<?php if(!defined('BASEPATH')) exit('No direct script access allowed'); // Phplot // Purpose, phplot Invokation complicated because of the wrapper to simplify bitten// @ Version 0.01-alpha// @ Link http://d.hatena.ne.jp/dix3/20081125/1227568495// TODO: adjust the default parameters// TODO: remove unnecessary files around to a more refined// TODO: measures to deny direct links// TODO: Construction of commentsclass Graph {
var $CI;
var $obj;
var $base_path = 'public/images/';
var $random_file_prefix = 'plot'; // generate a random file of the file name prefix
var $random_file_name_length = 12; // When a random file name prefix, suffix, excluding the length of
var $old_file_del_flg = true; // generate the underlying base_path to delete old files? var $old_file_del_span = 10; // save old files in seconds
var $font_path; // font for the chart Pass
var $width; // Width
var $height; // Height
var $file_path; // generate the full path of files
var $url; // generate the URL of the file
var $input_file_path; //
var $data;
var $status;
functionGraph($params = array())
{
$this->CI=get_instance();
$this->CI->load->helper('string');
$this->CI->load->helper('url');
$this->CI->load->helper('file');
$this->CI->load->helper('html');
// Initialization$this->init($params);
}
// Initializationfunctioninit($params=array())
{
require_once('graph/phplot.php');
// Fonts$default_font_path = BASEPATH. 'fonts/sazanami-gothic.ttf';
if(isset($params['font_path']) && realpath($params['font_path']) && is_file(realpath($params['font_path']))) {$this->font_path = $params['font_path'];
}else {
if(isset($default_font_path) && realpath($default_font_path) && is_file(realpath($default_font_path))) {$this->font_path = $default_font_path;
}
}
// Generate a directory to save the file$this->base_path = isset($params['base_path']) ? $params['base_path']: $this->base_path;
// Generate a random file of the file name prefix$this->random_file_prefix = isset($params['random_file_prefix']) ? $params['random_file_prefix']: $this->random_file_prefix;
// When a random file name prefix, suffix, excluding the length of$this->random_file_name_length = isset($params['random_file_name_length']) ? (int) $params['random_file_name_length']: $this->random_file_name_length;
// Delete old files after generation?$this->old_file_del_flg = isset($params['old_file_del_flg']) ? $params['old_file_del_flg']: $this->old_file_del_flg;
// Width$this->width = isset($params['width']) ? (int) $params['width']: 450;
// Height$this->height = isset($params['height']) ? (int) $params['height']: 350;
// Chart the path to save the file$fpath = isset($params['path']) ? $params['path']:'';
// Graph file name, without specifying the file name at random. Png to$fname = isset($params['name']) ? $params['name']: $this->random_file_prefix. '_'. random_string('alnum', $this->random_file_name_length).'_'.time().'.png';
// Base pathif($fpath && realpath($fpath)) {
$this->file_path = rtrim(realpath($fpath),'/').'/'.$fname;
}else {
// Base path is not specified when the document root / img / plot / created the followingif(! realpath($this->base_path) ||! is_dir(realpath($this->base_path))) {
mkdir($this->base_path,0755);
}
$this->file_path = realpath($this->base_path).'/'.$fname;
}
// Generate the URL of the file$this->url = rtrim(base_url(), '/'). '/'. rtrim($this->base_path, '/'). '/'. $fname;
//if(isset($params['input']) && realpath($params['input']) && is_file (realpath($params['input']))) {$this->input_file_path = $params['input'];
}else {
$this->input_file_path = NULL;
}
$this->obj = newPHPlot($this->width, $this->height, $this->file_path, $this->input_file_path);
}
// Data and a set of parametersfunctionsetdata($data = array(), $params = array())
{
if(! $data ||! is_array($data)) {
returnfalse;
}else {
$this->data = $data;
}
// Default set of parameters$this->_setdefaultparams();
// Add a set of parametersif($params){
$this->_setparams($params);
}
$this->obj->SetDataValues($this->data);
returntrue;
}
// Default set of parameters, todo: a good feeling to be adjusted.//(Add as much as possible parameters to be adjusted to a good Does Not Pass)function_setdefaultparams()
{
// Specify the fontif($this->font_path) {
$this->obj->SetDefaultTTFont($this->font_path);
}
// Generated as a file$this->obj->SetIsInline(true);
// Select the data array representation and store the data:$this->obj->SetDataType('text-data');
// Background color$this->obj->SetBackgroundColor('#dddddd');
$this->obj->SetPlotBgColor('#f9f9f9');
$this->obj->SetDrawPlotAreaBackground(true);
// Font sizeif($this->font_path) {
$this->obj->SetFont('generic', $this->font_path, 9);
$this->obj->SetFont('title', $this->font_path, 11);
$this->obj->SetFont('x_label', $this->font_path, 9);
$this->obj->SetFont('y_label', $this->font_path, 9);
}
// Inner border$this->obj->SetPlotBorderType('full');
// Legend of the position// $this->obj->SetLegendWorld(0.1, 30);// Define the data range. PHPlot can do this automatically, but not as well.// $this->obj->SetPlotAreaWorld(0, 0, 7, 100);// Label or the presence or absence of increments and position$this->obj->SetXTickPos('none');
$this->obj->SetXTickLabelPos('none');
// $this->obj->SetXDataLabelPos('plotdown');// $this->obj->SetYTickPos('plotright');// $this->obj->SetYTickLabelPos('plotright');returntrue;
}
// Add a set of parametersfunction_setparams($params = array())
{
$class_methods = get_class_methods(get_class($this->obj));
// Call various methods to set the parameters Dashiforeach($paramsas$k => $v) {
if(in_array($k, $class_methods)) {
if(is_array($v)) {
$this->obj->$k($v);
}elseif(is_string($v)) {
// TODO: Later, I could write a more beautiful?$p = explode(',', $v);
$cnt = count($p);
switch($cnt) {
case1:
$this->obj->$k($p[0]);
break;
case2:
$this->obj->$k($p[0], $p[1]);
break;
case3:
$this->obj->$k($p[0], $p[1], $p[2]);
break;
case4:
$this->obj->$k($p[0], $p[1], $p[2], $p[3]);
break;
case5:
$this->obj->$k($p[0], $p[1], $p[2], $p[3], $p[4]);
break;
default:
break;
}
}else {
}
}
}
returntrue;
}
// Generate the graph filesfunctiondraw()
{
if($this->data) {
if($this->old_file_del_flg) {
$this ->gcfiles();
}
$this->status = $this->obj->DrawGraph();
return$this->status;
}else {
returnfalse;
}
}
// Generate a graph to obtain the URL of the filefunctiongeturl()
{
return ($this->status) ? $this->url:'';
}
// Generate a graph of the image files to obtain tagsfunctiongetimg($index_page = FALSE)
{
return ($this->status) ? img($this->url, $index_page):'';
}
// Old image file (an image file of random file name) removedfunctiongcfiles()
{
$file_arr = get_dir_file_info($this->base_path);
$now = time();
if(is_array($file_arr)) {
$regexp = '#^'. $this->random_file_prefix."_.{{$this->random_file_name_length}}_\d+\..+$#u";
foreach($file_arras$k => $v) {
if(preg_match($regexp, basename($v['name']))) {
// Delete old filesif(((int) $now -($v['date'] +(int) $this->old_file_del_span))> 0) {
@unlink ($v['server_path']);
}
}
}
}
}
} ?> - Create the controller file named graphtest.php , as follows :
graphtest.php
<?php class Graphtest extends Controller { // Constructor functionGraphtest() { parent:: Controller(); // Url helper $this->load->helper('url'); // Form helper $this->load->helper('form'); // String helper $this->load->helper('string'); }
// Phplot test, // Todo: phplot own parameters too shrewd not to understand functionindex() { // Load chart library $this->load->library('graph'); //------------------------- // Graph generation(first round) // Pass the data, we try to make random $arr = array(
array('1', random_string('numeric',3),), array('2', random_string('numeric',3),), array('3', random_string('numeric',3),), array('4', random_string('numeric',3),), array('5', random_string('numeric',3),), array('6', random_string('numeric',3),), array('7', random_string('numeric',3),), ); // Additional parameters, phplot key in the name of the method, set the value argument $params = array('SetTitle' => 'surveys of the 1',// title 'SetLegend' => array('apple', 'banana', 'orange', 'grape', 'lemon', 'peach','pear'),// legend 'SetDataType' => 'text-data-single', 'SetPlotType' => 'pie',// chart the type of area bars linepoints lines pie points squared stackedbars thinbarline
); // Data and a set of parameters $this->graph->setdata($arr,$params); // Graph generation $this->graph->draw(); // Generate a graph of the acquired IMG tag $data['graph_img1'] = $this->graph->getimg(); // Obtain the URL of the generated graphs $data['graph_url1'] = $this->graph->geturl(); //------------------------- // Graph generation(second) // Init initializes $this->graph->init(array('width'=>600,'height'=>400)); // Pass the data, we try to make random // $arr = array(// array('2005', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // array('2006', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // array('2007', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // array('2008', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // array('2009', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // array('2010', random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3), random_string('numeric', 3)), // ); $arr = array(
array('2001', 350, 200),
array('2002', 300, 300),
array('2003', 250, 400),
array('2004', 200, 600),
array('2005', 150, 700),
array('2006', 260, 800),
array('2007', 500, 900),
); // Additional parameters, phplot key in the name of the method, set the value argument $params = array('SetTitle'=>'Usage Report',// title //'SetLegend' => array( 'Moon', 'Mars', 'Jupiter'),// legend 'SetPlotType' => 'bars',// chart the type of area bars linepoints lines pie points squared stackedbars thinbarline
); // Data and a set of parameters $this->graph->setdata($arr,$params); // Methods called for more direct $this->graph->obj->SetBackgroundColor('#f0f000'); $this->graph->obj->SetDrawPlotAreaBackground(True);
$this->graph->obj->SetPlotBgColor('#ffffff');
//$this->graph->obj->SetLegendWorld(0.1, 900); $this->graph->obj->SetYTitle('MegaByte');
// Graph generation $this->graph->draw(); // Generate a graph of the acquired IMG tag $data['graph_img2'] = $this->graph->getimg(); // Obtain the URL of the generated graphs $data['graph_url2'] = $this->graph->geturl(); $data['title'] = 'PHPLOT test of the library'; // Generate the view $this->load->view('graph_index.php',$data);
}
}
?>- Create the new file named graph_index.php, place in view directory, for output purpose with the following contents:
graph_index.php
<h2><?=$title?></h2>
<h3><?=$graph_url1?></h3>
<?=$graph_img1?>
<hr>
<h3><?=$graph_url2?></h3>
<?=$graph_img2?>
Download the example files