[codeigniter]CI中使用pChart绘制图表,已测通过
?
因為一個codeigniter開發的項目上要用到圖表。FusionChart是flash技術,在某些情況下可能造成無法使用(如ipad)。因此不禁想起了之前用Pchart做的圖表項目。
但是畢竟是在CI里,有時候為了吻合框架的特性,不得不去遷就而修改自己的代碼。
最初我的想法是把Pchart的類文件放在libraries文件里,然后在controllers控制器里調用,可以總是出現各種錯誤。嘗試了很多次都是失敗,難道在CI里用Pchart這么難?!!!
于是去百度+谷歌上去找相關的資料。找到了N多篇相同的標題為“在CI中使用pChart庫”這類的文章,并且內容都95%驚人的相似。看來世界的確是大同了,思想都一樣了(不太喜歡貼別人文章不表明轉載的,人家博主寫篇文章多費勁啊,你這得了便宜還賣乖,粘貼下成自己的了。).
好吧,看下思路,大致是在libraries里多創建一個類,來調用Pchart的類,進而達到使用目的。不知道大伙有沒有測試,不過我這邊測試的時候總有問題,于是心里很著急,又嘗試了很多次,還是失敗。于是就想自己寫算了。不過還是運用了網絡上文章的思路。即把Pchart類包放置于libraries下。但是調用類中的方法確實自己運用之前非CI框架下的方法。
目錄架構類似于這樣:
--demoweb
? --application
??? --....
??? --libraries
????? --pChart
--pChart的眾類文件
????? --Mychart.php
??? --...
? --system
? 個人是把字體都和Pchart的類文件都放在pChart這個目錄里的。等下看代碼的時候大家就會注意到了。
? 下面貼出來Mychart.php(即調用的pchart的類文件),以及控制器里方法的測試示例代碼:
Mychart.php示例代碼:
?
?
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * FOR:調用pchart類繪制圖表 * @author cheng.yafei * @version 1.0 **/ class Mychart {/** * FOR:畫圖,立體餅圖 * @param $dataArray 詳細票數數組 * @param $reportArr 詳細票數對應選項數組 **/ function draw3DPieImage($dataArray, $lableArray) {include(dirname(__FILE__)."/pChart/pData.class");include(dirname(__FILE__)."/pChart/pChart.class");$datanum = $dataArray;$dataname = $lableArray;// Dataset definition $DataSet = new pData;$DataSet->AddPoint($datanum,"Serie1");$DataSet->AddPoint($dataname,"Serie2");$DataSet->AddAllSeries();$DataSet->SetAbsciseLabelSerie("Serie2");$Test = new pChart(420,220);$Test->drawFilledRoundedRectangle(7,7,415,213,5,240,240,240);//灰色圓角背景$Test->drawRoundedRectangle(5,5,417,215,5,230,230,230);//灰色圓角框// Draw the pie chart$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);$Test->drawPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),150,90,110,PIE_PERCENTAGE,TRUE,50,20,5);$Test->drawPieLegend(310,15,$DataSet->GetData(),$DataSet->GetDataDescription(),250,250,250);$totalStr = '(共'.array_sum($datanum).'票)';$Test->drawTitle(20,20,$totalStr,50,50,50,380);//標題;drawTitle(20,20,參數名,50,50,50,380) 20左邊距,$rand = rand(100,300);$image_name = $rand.'_3dpie.png';$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name; $Test->Render($image_file_name); // header("content-type:text/html;charset=utf-8;");echo dirname(dirname(dirname(__FILE__))).'/actpic'."<br>";echo "<h3>餅圖:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>"; }//end function draw3DPieImage 立體餅圖/******************************* * FOR:畫圖,分離的餅圖 * @param $dataArray 詳細票數數組 * @param $reportArr 詳細票數對應選項數組 ********************************/ function drawDepartPieImage($dataArray, $lableArray) { include(dirname(__FILE__)."/pChart/pData.class");include(dirname(__FILE__)."/pChart/pChart.class");$datanum = $dataArray;$dataname = $lableArray;// Dataset definition $DataSet = new pData;$DataSet->AddPoint($datanum,"Serie1");//投票數字$DataSet->AddPoint($dataname,"Serie2");//對應文本$DataSet->AddAllSeries();$DataSet->SetAbsciseLabelSerie("Serie2");// Initialise the graph$Test = new pChart(370,220);//(長,寬)畫布長寬$Test->drawFilledRoundedRectangle(7,7,353,213,5,240,240,240);//灰色圓角背景$Test->drawRoundedRectangle(5,5,355,215,5,230,230,230);//灰色圓角框// Draw the pie chart$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);$Test->AntialiasQuality = 0;$Test->drawFlatPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),120,100,60,PIE_PERCENTAGE,10);//畫餅圖$Test->drawPieLegend(230,15,$DataSet->GetData(),$DataSet->GetDataDescription(),250,250,250);//畫選項圖$totalStr = '(共'.array_sum($datanum).'票)';$Test->drawTitle(20,20,$totalStr,50,50,50,380);//標題;drawTitle(20,20,參數名,50,50,50,380) 20左邊距, $rand = rand(100,300);$image_name = $rand.'_departpie.png';$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name; $Test->Render($image_file_name);echo "<h3>離散餅圖:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>"; }// end drawDepartPieImage /******************************* * FOR:畫圖,柱狀圖 * @param $dataArray 詳細票數數組 * @param $reportArr 詳細票數對應選項數組 ********************************/ function drawBarImage($dataArray, $lableArray) {include(dirname(__FILE__)."/pChart/pData.class");include(dirname(__FILE__)."/pChart/pChart.class");// Dataset definition $DataSet = new pData;foreach($dataArray as $k=>$v){$DataSet->AddPoint($v, "Serie".$k);$DataSet->SetSerieName($lableArray[$k], "Serie".$k);}$DataSet->AddAllSeries();$DataSet->SetAbsciseLabelSerie();// Initialise the graph$Test = new pChart(700,230);$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);$Test->setGraphArea(50,30,550,200);$Test->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);$Test->drawRoundedRectangle(5,5,695,225,5,230,230,230);$Test->drawGraphArea(255,255,255,TRUE);$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE);$Test->drawGrid(4,TRUE,230,230,230,50);// Draw the 0 line$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",6);$Test->drawTreshold(0,143,55,72,TRUE,TRUE);// Draw the bar graph$Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);// Finish the graph$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8); // $Test->drawLegend(596,150,$DataSet->GetDataDescription(),255,255,255);$Test->drawLegend(580,30,$DataSet->GetDataDescription(),255,255,255);//(左邊距,上邊距,描述....)$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",10);$Test->drawTitle(50,22,"投票",50,50,50,585);$rand = rand(100,300);$image_name = $rand.'_zhuzhuang.png';$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name; $Test->Render($image_file_name);echo "<h3>離散餅圖:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>";}//end function drawBarImage 柱狀圖}//END class?
?
然后再在控制器的方法里調用這個類使用:
?
?
function test(){$this->load->library('mychart'); //載入pChart庫$dataArray = array('54','95','158','241','19');$lableArray = array('成龍','施瓦辛格','龍格爾','史泰龍','李連杰');$this->mychart->draw3DPieImage($dataArray,$lableArray);}//end functionfunction test2(){$this->load->library('mychart'); //載入pChart庫$dataArray = array('555','95','158','241','19');$lableArray = array('黃家駒','平克弗洛伊德','譚詠麟','張學友','劉德華');$this->mychart->drawDepartPieImage($dataArray,$lableArray);}//end functionfunction test3(){$this->load->library('mychart'); //載入pChart庫$dataArray = array('369','95','158','241','19');$lableArray = array('黃家駒','平克弗洛伊德','譚詠麟','張學友','劉德華');$this->mychart->drawBarImage($dataArray,$lableArray);}//end function?
?
?
?
測試代碼,稍顯凌亂。需要的可以測試下。知識就是共享的。如果有問題的話可以在下面跟帖提問。
請注意使用的時候,一定注意寫對調用字體文件的路徑。
?
嘿嘿,其實博客園這次并不是首發,但是看到院子里這個點不多,所以放了進來。請大家多提些意見。
?
轉載于:https://www.cnblogs.com/chengyafei/archive/2012/07/04/ci_pchart.html
總結
以上是生活随笔為你收集整理的[codeigniter]CI中使用pChart绘制图表,已测通过的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wpf体系结构的学习
- 下一篇: 如何在工作中自学UI设计