1. 程式人生 > >使用Highcharts結合PHP與Mysql生成餅狀圖

使用Highcharts結合PHP與Mysql生成餅狀圖

我們在做複雜的資料統計功能時會用到餅狀圖,餅狀圖用整個圓表示總體的數量或整體值1,用圓內各個扇形的大小表示各部分數量或該部分佔總體的百分比,它可以清晰直觀的表示各部分之間以及各部分與整體之間的數量關係。

本文將結合實際,使用PHP讀取Mysql資料表中的資料,並將獲取的資料按照要求輸出給前端JS,再通過配置呼叫Highcharts圖表庫生成餅狀圖。

 

檢視演示DEMO 下載原始碼

1、準備

為了更好的講解,例項中在Mysql資料庫中建立一張表chart_pie,用於表示各搜尋引擎帶來的訪問量,表中分別有id、title和pv三個欄位,id是自增長整型、主鍵;title表示搜素引擎的名稱,pv表示對應的訪問量。chart_pie表中已預置了相關資料,如圖:

 

2、PHP

在pie.php檔案中,寫入如下程式碼:

include_once('connect.php'); //連線資料庫 
$res = mysql_query("select * from chart_pie"); 
while($row = mysql_fetch_array($res)){ 
    $arr[] = array( 
        $row['title'],intval($row['pv']) 
    ); 
} 
$data = json_encode($arr); 

程式碼中使用原生的PHP查詢mysq資料的方法,將查詢的結果集儲存在一個數組$arr裡,並將該陣列轉換 以備前端js呼叫。

3、Javascript

通過配置Highcharts,可以生成一個漂亮的餅狀圖,詳見程式碼及註釋,如果你還不知道Highcharts是什麼東東,請查閱本站(helloweba.com)前面的相關文章。

var chart; 
$(function() { 
    chart = new Highcharts.Chart({ 
        chart: { 
            renderTo: 'chart_pie',  //餅狀圖關聯html元素id值 
            defaultSeriesType: 'pie'//預設圖表型別為餅狀圖 
            plotBackgroundColor: '#ffc'
,  //設定圖表區背景色              plotShadow: true   //設定陰影          },          title: {              text: '搜尋引擎統計分析'  //圖表標題          },          credits: {              text: 'helloweba.com'          },          tooltip: {              formatter: function() { //滑鼠滑向影象提示框的格式化提示資訊                  return '<b>' + this.point.name + '</b>: ' +                   twoDecimal(this.percentage) + ' %';              }          },          plotOptions: {              pie: {                  allowPointSelect: true, //允許選中,點選選中的扇形區可以分離出來顯示                  cursor: 'pointer',  //當滑鼠指向扇形區時變為手型(可點選)                  //showInLegend: true,  //如果要顯示圖例,可將該項設定為true                  dataLabels: {                      enabled: true,  //設定資料標籤可見,即顯示每個扇形區對應的資料                      color: '#000000',  //資料顯示顏色                      connectorColor: '#999',  //設定資料域扇形區的連線線的顏色                      style:{                          fontSize: '12px'  //資料顯示的大小                      },                      formatter: function() { //格式化資料                          return '<b>' + this.point.name + '</b>: ' +                           twoDecimal(this.percentage) + ' %';                      }                  }              }          },          series: [{ //資料列              name: 'search engine',              data: <?php echo $data;?> //核心資料列來源於php讀取的資料並解析成JSON          }]      });  }); 

上述程式碼中,核心資料data來源於pie.php中php轉換的json資料:$data。轉換後輸出的JSON資料格式為:

[["\u767e\u5ea6",1239],["google",998],["\u641c\u641c",342],["\u5fc5\u5e94",421], 
["\u641c\u72d7",259],["\u5176\u4ed6",83]]  

不用擔心,Highcharts會自動將JSON資料解析處理,並生成百分比的資料。

其實,Highcharts生成的餅狀圖還可以設定預設初始選中的扇形,即預設選中的扇形會從整圓形中分離出來,以便突出顯示。該效果要求預設data格式為:

[{"name":"\u767e\u5ea6","y":1239,"sliced":true,"selected":true},["google",998], 
["\u641c\u641c",342],["\u5fc5\u5e94",421],["\u641c\u72d7",259],["\u5176\u4ed6",83]]  

注意看程式碼中前部分:{"name":"\u767e\u5ea6","y":1239,"sliced":true,"selected":true},這個字串如何用PHP得到呢?這就要修改pie.php中的php部分程式碼:

while($row = mysql_fetch_array($res)){ 
    if($row['id']==1){ 
        $arr1[] = array( 
            "name" =>  $row['title'], 
            "y" => intval($row['pv']), 
            "sliced" => true,  //預設分離 
            "selected" => true  //預設選中 
        );  
    }else{ 
        $arr[] = array( 
            $row['title'],intval($row['pv']) 
        ); 
    } 
} 
//合併陣列 
$arrs = array_merge($arr1,$arr); 
$data = json_encode($arrs); 

我們在迴圈遍歷結果集時,當id為1時,將該項設定為預設選中扇形區,構建陣列$arr1,否則構建另一個數組$arr,然後將這兩個數組合並,並將合併後的陣列轉換為json資料,供Highcharts呼叫。

此外,格式化資料市,如果要顯示百分比,可使用this.percentage,Highcharts會自動將整數轉換為百分數,如果要顯示資料量,直接使用this.y。

使用百分比:

formatter: function() { //格式化資料 
    return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %'} 

使用實際資料:

formatter: function() { //格式化資料 
    return '<b>' + this.point.name + '</b>: ' + this.y ; 

} 

注意:在使用百分比資料時,需要將資料強制保留兩位小數,否則有可能出現37.0000000001的情況,而實際上是37%。保留2位小數的JS函式twoDecimal()請下載本例demo原始碼。

相關推薦

使用Highcharts結合PHPMysql生成

我們在做複雜的資料統計功能時會用到餅狀圖,餅狀圖用整個圓表示總體的數量或整體值1,用圓內各個扇形的大小表示各部分數量或該部分佔總體的百分比,它可以清晰直觀的表示各部分之間以及各部分與整體之間的數量關係。 本文將結合實際,使用PHP讀取Mysql資料表中的資料,並將獲取

echarts生成、柱、多項柱的引數介紹

1.餅圖 html程式碼: <div id="SexDistri" style="width: 100%;height: 50%;"></div> 下面的柱狀圖的html程式碼也與此類似。 js程式碼: var SexDistributi

java代碼實現highchart數據庫數據結合完整案例分析(一)---

隱藏 des log cred 數據庫數據 idt string 時間 input 作者原創:轉載請註明出處 在做項目的過程中,經常會用到統計數據,同時會用到highchart或echart進行數據展示,highchart是外國開發的數據統計圖插件, echa

PHP jpgraph庫的配置及生成統計圖表:折線、柱

此文為轉載,僅作儲存文件使用,轉自:http://blog.csdn.net/aoshilang2249/article/details/46956163 注意:原文中提到配置php.ini中的include_path,親測不需要配置(gd2需要開啟),只需要將下載的檔案引入專案即可

PHP畫矩形,橢圓,圓,畫橢圓弧 ,

tro lips ade inpu 統計 起點 com eth func 1:畫矩形: imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) imagere

PHPMYSQL事務處理

舉例 database 相同 bsp 幾分鐘 acl exists 細節 data PHP與MYSQL事務處理 $conn = mysql_connect(‘localhost‘,‘root‘,‘root‘) or die ("數據連接錯誤!!!"); mysql_

phpMySQLajaxechart綜合

error: new ror cat val utf too pri div http://www.yinghualuowu.com/php/echart.html 創建table sex 有name num <?php in

javascript、phpmysql日期計算函數

javascript、php與mysqljavascript: /** * 日期計算類 * @author [lee] <[<www.dollarphp.com>]> * @param dur 增量 如:+1day -5 year 6months * @param time 傳入時間

使用phpmysql構建我們的網站

技術這個玩意就是要不斷的去使用,才能夠熟能生巧。今天我記錄的使用php與mysql構建我們的網站,其實是我兩年前的時候寫的專案。 現在看看自己以前寫的個人專案,也會感嘆時間究竟帶走了什麼?好記性不如爛筆頭,常寫常練,才能夠真正的有收穫。這個專案當初也是為了公司的專案 能夠做的更好,自己又喜歡足球,所以才模仿的

phpmysql權威指南》第三部分02

第14章 mysql資料庫開發14.1 mysql資料型別   1.數值型別:     五種整型:tinyint,smallint,mediumint,int,bigint分別為1,2,3,4,8位元組數     三種浮點型:float,double,decimal分別4,8,m位元組     # 宣告一個整

PHPMYSQL(增,查)

這幾天寫PHP大作業,簡直從0開始PHP,之前因為打比賽佔了很多時間,現在重新學一下,感覺和c差不多,除了經常忘記寫$,當然資料庫的插入的確花費了一些時間,感覺寫的沒什麼問題就是插不到資料庫中,(感覺自己能A,缺一直返回WA) 貼下資料庫有關的插入和遍歷結果 程式碼: <?php

Qt文件閱讀筆記-C++QML混合程式設計(QML畫

這裡只點名一點: Qt Charts是利用Qt的圖形檢視框架(QGraphics)搞出來的,底層並不是用OPenGL,而QML卻與OPenGL的底層緊密關聯 執行截圖如下: 原始碼如下

phpmysql權威指南》第一部分

第一部分 準備篇第1章 Apache基礎1.1 Apache介紹:開源的http伺服器軟體   常見的Web伺服器:Apache,IIS,Tomcat   web系統架構也被成為B/S架構-瀏覽器/伺服器架構   工作原理:瀏覽器向伺服器傳送一個http請求,伺服器對接收到的請求資訊進行處理,然後將處理結果返

PHPMySQL互動——插入資料

向資料表裡插入如下資料: ‘test’, ‘12345678’,’man’,’2016-3-3’,’[email protected]’   SQL語句如下: INSERT INTO User (name,password,sex,dob,e

PHPMySQL互動——建立資料表

建立一個名User的資料表 SQL語句為: CREATE TABLE User (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, password VARCHAR(20) NO

PHPMYSQL實現使用者登入登出

因為最近才學習php與mysql,為了寫留言板的註冊,登入與登出功能,接觸到php的session會話機制,想要記錄下來。 Session: 代表伺服器與瀏覽器的一次會話過程(其本來的含義是指有始有終的一系列動作/訊息),這個過程是連續的,也可以時斷時續的。

PHPMYSQL學習筆記--基礎篇1

PHP與MYSQL基礎學習總結 使用書籍:PHP和Mysql web開發從前新手到高手 安裝 MYSQL一些知識總結 PHP一些知識總結 PHP與MYSQL基礎應用 安裝 windows下XAMPP安裝 從Apache Friends

Oracle生成不重複字串 sys_guid()Mysql生成唯一值

 (1)oracle生成不重複字串 在oracle8i以後提供了一個生成不重複的資料的一個函式sys_guid()一共32位,生成的依據主要是時間和機器碼,具有世界唯一性,類似於java中的UUID(都是世界唯一的)。其優點就是生成的字串是唯一的,但其和UUID有同樣的弊端:

Web在jsp頁面中生成,折線

一、前言 在實際開發過程中,柱狀圖,折線圖,餅狀圖在一些OA,ERP中是非常常見的功能,特別是需求方是業務型,資料分析型公司,下面的例子簡單實現了餅狀圖,柱狀圖,折線圖在jsp中生成。(ps:新手上路,不喜勿噴) 二、前期準備 1.使用的框架:s

java 生成等圖片

package com.sinosoft.webmodule.landLibrary; import java.awt.Color; import java.awt.Font; import java.io.File; import java.io.FileOutputSt