ThinkPHP5.1 實例配置 ECharts 的使用指導

1、背景

  • 最近由於基本業務的上線應用,須要對網站進行一些統計監控,想到能夠拓展使用 echarts, 在此記錄一下簡單的使用方式,以做備忘,也方便後期直接拿來使用

簡要介紹:javascript

ECharts,
一個使用 JavaScript 實現的開源可視化庫;
能夠流暢的運行在 PC 和移動設備上,兼容當前絕大部分瀏覽器(IE8/9/10/11,Chrome,Firefox,Safari等);
底層依賴矢量圖形庫 ZRender,提供直觀,交互豐富,可高度個性化定製的數據可視化圖表

ECharts 
提供了常規的折線圖、柱狀圖、散點圖、餅圖、K線圖,用於統計的盒形圖;
用於地理數據可視化的地圖、熱力圖、線圖;
用於關係數據可視化的關係圖、treemap、旭日圖,多維數據可視化的平行座標;
還有用於 BI 的漏斗圖,儀表盤;
而且支持圖與圖之間的混搭 ......

官方詳情,就移步:—— ECHARTS (商業級數據圖表)php

2、使用步驟

  • 鄙人的使用環境爲 "ThinkPHP5.1.2 + layui + echarts+ phpStudy"
  • 採用的方式爲:下載官網的 echarts.js 文件,並進行本地引用,而後經過 異步數據加載和更新方法 進行頁面數據渲染

①. 引入 ECharts

  • 注意從官網下載 echarts.js 文件,好比鄙人就是在「下載」頁最後,點擊「我的定製」,選取所須要的樣式進行下載便可
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!-- 引入 ECharts 文件 -->
    <script src="__ECHARTS__/echarts.js"></script>
</head>
<body>
    <!-- 爲 ECharts 準備一個具有大小(寬高)的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
</body>
</html>

②. 進行異步數據請求與頁面渲染

  • 鄙人認爲,異步數據的請求加載纔是正常業務的應用場景,以下展現鄙人的源碼以便參考
<script>
    // 基於準備好的dom,初始化echarts實例
    var myChart = echarts.init(document.getElementById('main'));
    // 顯示標題,圖例和空的座標軸
    myChart.setOption({ 
 
   
        title: { 
 
   
            text: '熱銷產品環形統計圖'
        },
        tooltip: { 
 
   
            trigger: 'item',
            formatter: "{a} <br/>{b}: {c} ({d}%)"
        },
        series: [
            { 
 
   
                name:'產品分類',
                type:'pie',
                selectedMode: 'single',
                radius: [0, '32%'],

                label: { 
 
   
                    normal: { 
 
   
                        position: 'inner'
                    }
                },
                labelLine: { 
 
   
                    normal: { 
 
   
                        show: false
                    }
                }
            },
            { 
 
   
                name:'熱賣產品',
                type:'pie',
                radius: ['40%', '62%'],

                grid: { 
 
    // 控制圖的大小,調整下面這些值就能夠,
                    x: 40,
                    x2: 100,
                    y2: 150 // y2能夠控制 X軸跟Zoom控件之間的間隔,避免覺得傾斜後形成 label重疊到zoom上
                },
                xAxis: [
                    { 
 
   
                        name: "",
                        type: 'category',
                        axisLabel:{ 
 
   
                            interval:0,//橫軸信息所有顯示
                            rotate:-30 //-30度角傾斜顯示
                        }
                    }],

                label: { 
 
   
                    normal: { 
 
   
                        formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
                        backgroundColor: '#eee',
                        borderColor: '#aaa',
                        borderWidth: 1,
                        borderRadius: 4,
                        rich: { 
 
   
                            a: { 
 
   
                                color: '#999',
                                lineHeight: 22,
                                align: 'center'
                            },
                            hr: { 
 
   
                                borderColor: '#aaa',
                                width: '100%',
                                borderWidth: 0.5,
                                height: 0
                            },
                            b: { 
 
   
                                fontSize: 16,
                                lineHeight: 33
                            },
                            per: { 
 
   
                                color: '#eee',
                                backgroundColor: '#334455',
                                padding: [2, 4],
                                borderRadius: 2
                            }
                        }
                    }
                },
            }
        ]
    });
    //TODO 動態綁定數據,此請求地址爲本人業務的數據處理反饋
    $.post("{:url('cms/analyze/hotGoodsPie')}").done(function (data) { 
 
   
    	//由於我返回的數據是 json 形式,此處須要進行解析處理!
        var resData = JSON.parse(data);
        myChart.setOption({ 
 
   
            series: [{ 
 
   
                data:resData.data.catInfo
            },
                { 
 
   
                    data:resData.data.goodsInfo
                }]
        });
    });
</script>

尤爲要注意這一句的使用: "var resData = JSON.parse(data);"css

③. 鄙人處理返回的數據形式

  • 這只是數據舉例,採用框架爲 ThinkPHP5.1.2
{ 
 
   "status":1,"message":"success",
"data":{ 
 
   
"goodsInfo":[
	{ 
 
   "name":"\u7eb3\u5b9d\u5e1d\u4e3d\u829d\u58eb\u5976\u916a\u5a01\u5316\u997c\u5e72145g*5","value":3},
	{ 
 
   "name":"\u4e2d\u539fG7100%\u901f\u6eb6\u5496\u5561800g*2","value":3},	
	{ 
 
   "name":"\u65bd\u5df4\u6d01\u80a4\u6c90\u6d74\u9732 200ml","value":1},
	{ 
 
   "name":"\u65bd\u5df4\u6d01\u80a4\u6c90\u6d74\u9732 400ml","value":1},
	{ 
 
   "name":"\u65bd\u5df4\u7c89\u523a\u62a4\u7406\u556b\u55b1 10ml","value":2},
	{ 
 
   "name":"\u96ea\u82b1\u79c0\u6ecb\u76c8\u808c\u672c\u6da6\u989c\u6c34125ml","value":1},
	{ 
 
   "name":"\u9038\u4e50\u8212\u6d53\u7f29\u6d17\u8863\u6db2\uff08\u85b0\u8863\u8349\uff09 1.5L","value":1},
	{ 
 
   "name":"\u9038\u4e50\u8212\u5185\u8863\u4e13\u7528\u6d53\u7f29\u6d17\u8863\u6db2 750ml","value":1},
	{ 
 
   "name":"\u5929\u7136\u4e4b\u6249\u91ce\u751f\u59dc\u76c8\u6da6\u6d17\u53d1\u9732 532ml","value":1},
	{ 
 
   "name":"\u7ef4\u53ef\u4e1d \u96f6\u611f\u536b\u751f\u5dfe -\u65e5\u7528\u62a4\u7ffc\u578b-\u91cf\u8d29\u88c5225mm 24\u7247","value":1}],
"catInfo":[
	{ 
 
   "name":"\u5f69\u5986","value":3},
	{ 
 
   "name":"\u65b9\u4fbf\u901f\u98df","value":4},
	{ 
 
   "name":"\u9762\u90e8\u62a4\u80a4","value":4},
	{ 
 
   "name":"\u9999\u6c34\u7cfb\u5217","value":1},
	{ 
 
   "name":"\u5934\u90e8\u62a4\u7406","value":1},
	{ 
 
   "name":"\u5973\u6027\u79c1\u62a4","value":2},
	{ 
 
   "name":"\u8eab\u4f53\u62a4\u7406","value":2},
	{ 
 
   "name":"\u997c\u5e72\u86cb\u7cd5","value":3},
	{ 
 
   "name":"\u5bb6\u5ead\u6e05\u6d01","value":4},
	{ 
 
   "name":"\u65e5\u5e38\u9632\u62a4","value":3}]
}}

④. 如上配置事後,獲得的效果以下:

3、附錄

  • 鄙人蔘考的官方實例爲:Nested Pies(嵌套環形圖)html

  • 因我的的業務需求,進行了簡單的處理,從視圖上看只是去掉了左側的圖示列表而已java

  • 再次提醒一下,通常後臺請求接口返回的都是"JSON"數據,因此須要
    上述的處理方法:var resData = JSON.parse(data);web

  • 附錄一個自行配置的柱狀數據圖,新大陸仍是須要本身去發現的!
    json

本文同步分享在 博客「moTzxx」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。瀏覽器

相關文章
相關標籤/搜索