PHP圖標類庫 - JpGraph使用詳解


http://w3note.com/web/181.html

 

微信平台開發的推廣支持應用里,為了滿足用戶渠道推廣分析的需要,公眾平台提供了生成帶參數二維碼的接口。使用該接口可以獲得多個帶不同場景值的二維碼,用戶掃描后,公眾號可以接收到事件推送,借此可以通過統計不同場景掃描的二維碼的結果來獲取商業信息。

 

為了更形象地展示統計結果,可以使用php作圖,不過這需要掌握復雜抽象的畫圖函數,這里推薦使用php的JpGraph圖表類庫,它使得作圖變成了一件非常簡單的事情,你只需從數據庫中取出相關數據,定義標題,圖表類型,然后的事情就交給JpGraph,只需掌握為數不多的JpGraph內置函數(可以參照JpGraph附帶例子學習),就可以畫出非常炫目的圖表!

 

因為我最近也在做phpcmw微信插件用戶信息統計這塊,所以對JpGraph作了一番研究應用。為避免初學者走我走過的彎路,我把調試記錄整 理出來,分享給大家。

 

通過本文你至少可以掌握以下技巧:

1、能夠使用JpGraph畫出各式各樣的圖表

2、解決中文亂碼

 

一、開啟GD庫

Jpgraph需要GD庫的支持,所以在調式JpGraph之前,確保GD庫已開啟,這很重要,不然后面的工作就沒辦法展開了。GD庫在PHP5中是被默認安裝的,我們只需開啟GD庫就可以了。

打開php.ini文件,找到“;extension=php_gd2.dll”選項,將其前的分號“;”去掉,如圖所示

然后保存修改后的文件並重新啟動apache服務器。可以通過phpinfo()函數來獲取GD2函數庫的安裝信息,驗證GD庫是否安裝成功。

 

二、使用方法

在使用JpGraph時,最好弄明白你使用的是哪一個版本,千萬不要弄錯,不然就會張冠李戴,讓你調得頭暈目眩的。也不要從網上找一些片斷代碼來調試,除非它是完整的,不然也會讓你吃不了兜着走的了。嘮叼就到這里了,下面開始調試。

 

運行環境

操作系統  W7

代碼運行環境  apache+php5.3

JpGraph版本 jpgraph-3.5.0b1(點擊這里下載或者到官網http://jpgraph.net/download/下載)

 

解壓下載的jpgraph-3.5.0b1壓縮包,會看到一些目錄:

src:圖表生成所依賴的代碼包,其子目錄Examples里有許多的實例。

src\Examples:里面包函許多實例,使用它們可以制作各種各樣的圖表

docs :jpgraph的開發文檔,但全是英文的.。

docs\chunkhtml:里面有許多案例及附有圖表,通過它我們可以參考一下我們所需要的圖表。

 

在網站根目錄建一個文件夾test,然后把把docs和src文件夾拷貝到前面所創建的目錄test里,重命名src為jpgraph,這里因為Examples里面的實例文件加載的路徑都是“require_once ('jpgraph/jpgraph.php');”

 

實例

把jpgraph\Examples\accbarex1.php拷貝到test目錄(和jpgraph同一目錄),然后打開打開http://localhost/test/accbarex1.php,我們就會看到生成的圖

嘩,這是我們使用PHP作圖很難實現的!

 

來看一下它的源碼吧:

01 //加載生成圖表對應的文件
02 require_once ('jpgraph/jpgraph.php');
03 require_once ('jpgraph/jpgraph_bar.php');
04  
05 //創建圖表的數據,可以自定義
06 $data1y=array(-8,8,9,3,5,6);
07 $data2y=array(18,2,1,7,5,4);
08  
09 // 圖表的長寬
10 $graph new Graph(500,400);
11 $graph->SetScale("textlin");
12 $graph->SetShadow();
13  
14 //圖表的外邊距
15 $graph->img->SetMargin(40,30,20,40);
16 // Create the bar plots
17 $b1plot new BarPlot($data1y);
18 $b1plot->SetFillColor("orange");
19 $b1plot->value->Show();
20 $b2plot new BarPlot($data2y);
21 $b2plot->SetFillColor("blue");
22 $b2plot->value->Show();
23 // Create the grouped bar plot
24 $gbplot new AccBarPlot(array($b1plot,$b2plot));
25 // ...and add it to the graPH
26 $graph->Add($gbplot);
27  
28 //設置圖表的標題字體、大小
29 $graph->title->Set("Accumulated bar plots");
30 $graph->xaxis->title->Set("X-title");
31 $graph->yaxis->title->Set("Y-title");
32  
33 //和上面標題對應,設置標題的字體和大小
34 $graph->title->SetFont(FF_FONT1,FS_BOLD);
35 $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
36 $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
37  
38 //生成本地圖表,黙認留空,生成在當前目錄,可以Stroke(“路徑/文件名.png”)這樣指定路徑
39 $graph->Stroke();

JpGraph的難點是中文亂碼的解決,本來還想把這個問題一塊解決的,但似乎篇幅有點長了,留到下一篇吧

 

小結:調試JpGraph,需要注意其運行環境、版本、操作系統以及代碼的完整性,不然相同的代碼可能卻無法正確運行。


 

JpGraph使用詳解之中文亂碼解決方法

在前面的JpGraph使用詳解這篇文章,已經對JpGraph的使用方法作了詳細的交代,前面說好的,接下來解決中文亂碼。

JpGraph為什么會出現中文亂碼

在JpGraph中默認是要把字符串轉成utf8的,但是如果你的文件本身就是utf8的,並且要用中文字體,它還會轉一遍,結果多轉了一次,就會出現亂碼。如圖所示

 

解決中文亂碼

取前篇的代碼片斷如下

1 //設置圖表的標題字體、大小
2 $graph->title->Set("Accumulated bar plots");
3 $graph->xaxis->title->Set("X-title");
4 $graph->yaxis->title->Set("Y-title");
5  
6 //和上面標題對應,設置標題的字體和大小
7 $graph->title->SetFont(FF_FONT1,FS_BOLD);
8 $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
9 $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

把它改為

1 //設置圖表的標題字體、大小
2 $graph->title->Set(iconv("UTF-8","GB2312//IGNORE","網志博客信息統計表"));
3 $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-標題"));
4 $graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-標題"));
5  
6 //和上面標題對應,設置標題的字體和大小
7 $graph->title->SetFont(FF_SIMSUN,FS_BOLD);
8 $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
9 $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);

使用php函數據中文由UTF-8轉為GB2312,記住由於iconv本身的一個bug,iconv在轉換字符"—"到gb2312時會出錯,所以在需要轉成的編碼后加上 "//IGNORE" 。

FF_SIMSUN表示中文簡體,對應的字體文件是simsun.ttc,雖然FF_CHINESE和FF_BIG5也表示中文但是它們對應的字體文件是不同的,所以不要弄錯。

 

下面是正確轉換后生成的圖

下面是本例調試的完整代碼

01 require_once ('jpgraph/jpgraph.php');
02 require_once ('jpgraph/jpgraph_bar.php');
03  
04 $data1y=array(0,8,9,3,5,6);
05 $data2y=array(18,2,1,7,5,4);
06  
07 // Create the graph. These two calls are always required
08 $graph new Graph(500,400);
09 $graph->SetScale("textlin");
10  
11 $graph->SetShadow();
12 $graph->img->SetMargin(40,30,20,40);//設置圖形的邊距
13  
14 // Create the bar plots
15 $b1plot new BarPlot($data1y);
16 $b1plot->SetFillColor("orange");
17 $b1plot->value->Show();
18 $b2plot new BarPlot($data2y);
19 $b2plot->SetFillColor("blue");
20 $b2plot->value->Show();
21  
22 // Create the grouped bar plot
23 $gbplot new AccBarPlot(array($b1plot,$b2plot));
24  
25 // ...and add it to the graPH
26 $graph->Add($gbplot);
27 //設置標題字體樣式
28 $graph->title->Set(iconv("UTF-8","GB2312//IGNORE","網志博客信息統計表"));
29 $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-標題"));
30 $graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-標題"));
31  
32 $graph->title->SetFont(FF_SIMSUN,FS_BOLD);
33 $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
34 $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
35  
36 $graph->Stroke();

當然了,我這里只介紹了一種方法,還有一種就是修改源碼,但不推薦。因為我覺得改動源碼可能會給其它地方帶來意想不到的麻煩。

 

使用JpGraph,要知道其版本、運行服務器以及操作系統的息息,不能張冠李戴,否則麻煩多多。

好了,至此JpGraph使用介紹也就這么多了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM