-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Phplot
This page intended to be used as how to integrating PHPlot with CodeIgniter
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 :
http://phplot.sourceforge.net/
Original Code Author : hatena Japan,
Here are the following things need to be done in order to integrating PHPlot with CI:
- Download PHPlot source packages,extract
- Create new folder for example named graph, place under libraries folder of CI Installation.
- put the extracted files on the new directory(graph). The files are phplot.php, phplot_data.php, rgb.inc.php
- Create the new file named graph.php , with the following contents :
graph.php [code] <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); // Phplot creating the RAPPARAIBURARI // 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 comments
class 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;
function Graph ($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);
}
// Initialization
function init ($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 path
if ($fpath && realpath ($fpath)) {
$this -> file_path = rtrim(realpath($fpath),'/').'/'.$fname;
}else {
// Base path is not specified when the document root / img / plot / created the following
if (! 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 = new PHPlot ($this -> width, $this -> height, $this -> file_path, $this -> input_file_path);
}
// Data and a set of parameters
function setdata ($data = array (), $params = array ())
{
if (! $data ||! is_array ($data)) {
return false;
}else {
$this -> data = $data;
}
// Default set of parameters
$this -> _setdefaultparams ();
// Add a set of parameters
if ($params){
$this->_setparams($params);
}
$this->obj->SetDataValues($this->data);
return true;
}
// 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 font
if ($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 size
if ($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');
return true;
}
// Add a set of parameters
function _setparams ($params = array ())
{
$class_methods = get_class_methods (get_class ($this -> obj));
// Call various methods to set the parameters Dashi
foreach ($params as $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) {
case 1:
$this -> obj -> $k ($p [0]);
break;
case 2:
$this -> obj -> $k ($p [0], $p [1]);
break;
case 3:
$this -> obj -> $k ($p [0], $p [1], $p [2]);
break;
case 4:
$this -> obj -> $k ($p [0], $p [1], $p [2], $p [3]);
break;
case 5:
$this -> obj -> $k ($p [0], $p [1], $p [2], $p [3], $p [4]);
break;
default:
break;
}
}else {
}
}
}
return true;
}
// Generate the graph files
function draw ()
{
if ($this -> data) {
if ($this -> old_file_del_flg) {
$this ->gcfiles();
}
$this -> status = $this -> obj -> DrawGraph ();
return $this -> status;
}else {
return false;
}
}
// Generate a graph to obtain the URL of the file
function geturl ()
{
return ($this -> status)? $this -> url:'';
}
// Generate a graph of the image files to obtain tags
function getimg ($index_page = FALSE)
{
return ($this -> status)? img ($this -> url, $index_page):'';
}
// Old image file (an image file of random file name) removed
function gcfiles ()
{
$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_arr as $k => $v) {
if (preg_match ($regexp, basename ($v['name']))) {
// Delete old files
if (((int) $now - ($v [ 'date'] + (int) $this -> old_file_del_span))> 0) {
@unlink ($v[ 'server_path']);
}
}
}
}
}
} ?>
[/code]
- Create the controller file named graphtest.php , as follows :
graphtest.php
[code] <?php class Graphtest extends Controller { // Constructor function Graphtest() { 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 function index() { // 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 ( 'They ZERU', 'Ami', 'can-', 'pivotal', 'light', 'it is',' confession '),// 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( 'Sugi Naka', 'cause in the Deluxe', 'ink'),// 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);
}
} ?> [/code]
- Create the new file placed in view directory, for output purpose with the following contents:
graph_index.php
[code]
<?=$graph_img1?><?=$graph_img2?>
[/code]