Skip to content
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 :

Official site

Instructions Here are the following things need to be done in order to integrate PHPlot with CI:

  1. Download PHPlot source package from the official site,extract the downloaded file
  2. Create new directory for example named graph, place in under libraries directory of CI Installation.
  3. put the extracted files in the new directory(graph). The files are phplot.php, phplot_data.php, rgb.inc.php
  4. 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']);
}
}
}
}
}
} ?> 
  1. 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);
}
}
?>
  1. Create the new file named graph_index.php, place in view directory, for output purpose with the following contents:

graph_index.php

<h2>&lt;?=$title?&gt;</h2>
<h3>&lt;?=$graph_url1?&gt;</h3>
&lt;?=$graph_img1?&gt;
<hr>
<h3>&lt;?=$graph_url2?&gt;</h3>
&lt;?=$graph_img2?&gt;

Download the example files

Download

Clone this wiki locally