1. 程式人生 > >三個常用的PHP圖表類庫

三個常用的PHP圖表類庫

Jpgraph

 

只要把example中的require_once路徑改了就放進來用吧,我下的是最新版的jpgraph-3.5.0b1,反正測試嘛,我記得跟3.0.7還是有差別的,把檔名都重新命名過了,這個不錯,原先都是example1~n,都不知道是個什麼東西。好吧隨便開啟第一個檔案accbarex1.php,是個柱狀圖BarPlot,還有其他LinePlot線性圖,PiePlot餅狀圖等。程式碼很簡單,傳遞資料->設定圖的屬性->設定圖的節點屬性->畫圖設定圖的標題、字型、顏色等->展示,具體可以看下面的程式碼。就是中文有點糾結的,這個不是他的錯,是我們的GD庫編譯的時候有問題,所以這裡我把文字轉為html實體展示。很簡單吧,可以嘗試下玩玩。 
<?php // content="text/plain; charset=utf-8" require_once ('../jpgraph.php'); require_once ('../jpgraph_bar.php');   $data1y=array(-8,8,9,3,5,3);  //blue那條的資料 $data2y=array(18,20,16,10,5,6); //orange那條的資料   // Create the graph. These two calls are always required
$graph = new Graph(800,500);  //大小 * $graph->SetScale("textlin"); //設定刻度模式 還有intintlinlinloglintextlog等其他模式   $graph->SetShadow();  $graph->img->SetMargin(40,30,20,40); //設定圖表邊距,就跟cssmargin屬性是一樣的   // Create the bar plots $b1plot = new BarPlot($data1y);  //建立新的BarPlot物件 各種不同圖表就是通過呼叫不通物件實現的,BarPlot就是柱狀的,還有LinePlot線性圖,PiePlot餅狀圖
$b1plot->SetFillColor("orange"); //設定圖的顏色 $b1plot->value->Show();          //展示 $b2plot = new BarPlot($data2y);  //一樣的 $b2plot->SetFillColor("blue"); $b2plot->value->Show();   // Create the grouped bar plot $gbplot = new AccBarPlot(array($b1plot,$b2plot)); //開始畫圖了   $graph->Add($gbplot);  //在統計圖上繪製曲線   $graph->title->Set(iconv_arr("Phpwind 圖表測試"));  // 設定圖表標題 這裡iconv_arr是我自己加的,為了支援我們偉大的中文要把你的當前編碼轉化為html實體 $graph->xaxis->title->Set(iconv_arr("這個大概是月份吧")); //設定X軸標題 $graph->yaxis->title->Set(iconv_arr("這個是Y")); //設定Y軸標題 $graph->title->SetFont(FF_SIMSUN,FS_BOLD);  //設定標題字型,這裡字型預設是FF_FONT1,為了中文換成FF_SIMSUN $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD); //設定X軸標題字型 $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD); //設定Y軸標題字型   $graph->Stroke();  //輸出影象   function iconv_arr($data){          if(is_array($data)){             foreach($data as $k=>$v){                    $data[$k] = iconv_arr($v);             }          }else{             $data = mb_convert_encoding($data, "html-entities","gbk" );          }          return $data; }    鍥?
二 pChart 2.1 介紹 超字了...   2.3例項介紹          同樣拿個例項介紹下,我用的是最新版的pChart 1.27哦,pChart的工作流程主要分為以下幾步: (1)     讀取用於生成圖表資料(資料庫、檔案) (2) 設計圖形 (3) 把資料匯入圖形 (4) 配置圖形、文字樣式 (5) 成功圖形 同樣pChart也是需要GD庫支援的,所以中文亂碼問題也是存在的,這邊還是用上面那種方法解決哦,剛用Jpgraph畫過一個柱形圖,那現在搞一個餅圖玩玩吧。   <?php  include("pChart/pData.class"); //資料類  include("pChart/pChart.class"); //畫圖類   //準備好畫圖的資料 $arr1 = array(15,8,3,2,1); // 對應資料 $arr2 = iconv_arr(array('B2B','淘寶','支付寶','阿里雲','其他')); //資料的文字,和資料位置對應,這裡也用了iconv_arr轉換中文   //第一步 獲得餅圖資料 $data = new pdata;      $data->AddPoint($arr1,"serie1"); //裝入資料並命名為serie1 $data->AddPoint($arr2,"serie2"); //裝入說明並命名為serie2 $data->AddAllSeries();          //提交資料 $data->SetAbsciseLabelSerie("serie2");   //設定標籤   //第二步 畫圖形框架 $im = new pchart(400,300); //創造一個畫布並賦予尺寸 $im->drawFilledRoundedRectangle(7,7,413,243,5,240,240,240); //畫一個圓角矩形(x1,y1,x2,y2,圓角半徑,R,G,B) $im->drawRoundedRectangle(5,5,415,245,5,230,230,230); //畫圓角矩形""   //第三步 把資料匯入畫好的圖形內 $im->setFontProperties("Fonts/simhei.ttf",8); //設定字型及大小,需要把字型拷到Fonts資料夾下,或者windos指定到c/system32/fonts   //畫一個3維餅圖專用函式 //$data,餅圖結構資料 //$data資料引數 //$XPos,圓心的X座標 //$YPos,圓心的Y座標 //$Radius=100,半徑 //$DrawLabels=PIE_NOLABEL,標籤樣式(百分比和標籤) //$EnhanceColors=false, 邊框渲染 //$Skew=50,傾斜角度 //$SpliceHeight=20,餅的厚度 //$SpliceDistance=5,各板塊間距離 //$Decimals=2 顯示百分比小數位數 $im->drawPieGraph($data->GetData(),$data->GetDataDescription(),180,130,110,PIE_PERCENTAGE_LABEL,false,50,20,5,2);   //餅圖的標籤列表(從左至右順序) //$XPos,標籤框左上角的X座標 //$YPos,標籤框左上角的Y座標 //$data資料引數 //$R,$G,$B 背景顏色 $im->drawPieLegend(330,15,$data->GetData(),$data->GetDataDescription(),250,250,250);   //第四步 製作圖表標題和一些樣式 $im->setFontProperties("Fonts/simhei.ttf",12); //寫入標題的函式 //$XPos,標籤框左上角的X座標 //$YPos,標籤框左上角的Y座標 //$Value,標題文字內容 //$R,$G,$B,文字顏色 //$XPos2=-1,$YPos2=-1,座標調整的設定 //$Shadow=FALSE 陰影開關 $im->drawTitle(20,30,iconv_arr('阿里集團人員分佈'),100,100,100,-1,-1,false);   //第五步 輸出儲存圖形 $im->Render("test.png");//儲存為一個圖形檔案   function iconv_arr($data){          if(is_array($data)){             foreach($data as $k=>$v){                    $data[$k] = iconv_arr($v);             }          }else{             $data = mb_convert_encoding($data, "html-entities","gbk" );          }          return $data; }     鍥?   還有幾個方法ImportFromCSVcsv檔案匯入,loadColorPalettetxt檔案讀取,還是很給力的吧,快自己試試吧。   三 phplot 超字了... 3.3例項介紹          phplot的工作流程也是差不多的,這裡就寫一個線性圖來玩玩吧。具體請看程式碼,比較簡單,寫了詳細說明的。   <?php require_once 'phplot.php'; //設定資料 $data = array(   array('2010',  10,  2),   array('2011',  15,  8),   array('2012',  20,   14),   array('2013',  25,   24),   array('2014',  30,   35),   array('2015',  35,   45),   array('2016',  40,   60) );   $p = new PHPlot(600, 300);   $p->SetDefaultTTFont('Fonts/simhei.ttf'); //設定字型,還是支援中文的吧 $p->SetTitle(iconv_arr('Phpwind疾風學院男女人數比例')); //設定標題,還是用iconv_arr來解決中文   # Select the data array representation and store the data: $p->SetDataType('text-data'); //設定使用的資料型別,在這個裡面可以使用多種型別。 $p->SetDataValues($data); //把一個數組$data賦給類的一個變數$this->data_values.要開始作圖之前呼叫。 $p->SetPlotType('lines'); //選擇圖表型別為線性.可以是bars,lines,linepoints,area,points,pie等。   $p->SetPlotAreaWorld(0, 0, 7, 100);  //設定圖表邊距   # Select an overall image background color and another color under the plot: $p->SetBackgroundColor('#ffffcc'); //設定整個圖象的背景顏色。 $p->SetDrawPlotAreaBackground(True); //設定節點區域的背景 $p->SetPlotBgColor('#ffffff'); //設定使用SetPlotAreaPixels()函式設定的區域的顏色。 $p->SetLineWidth(3);  //線條寬度 # Draw lines on all 4 sides of the plot: $p->SetPlotBorderType('full');  //設定線條型別   # Set a 3 line legend, and position it in the upper left corner: $p->SetLegend(iconv_arr(array('男生人數', '女生人數'))); //顯示在一個圖列框中的說明 $p->SetLegendWorld(0.3, 95); //設定這個文字框位置   # Generate and output the graph now: $p->DrawGraph();   function iconv_arr($data){          if(is_array($data)){             foreach($data as $k=>$v){                    $data[$k] = iconv_arr($v);             }          }else{             $data = mb_convert_encoding($data, "html-entities","gbk" );          }          return $data; }  鍥? 這三個是PHP圖表類庫,對於一些需要互動的圖表(比如需要點選某個節點顯示大圖)還是不能滿足需求,只能用highchartsflotopen-flash-chart這種jsflash圖表工具來處理。