ECharts初識與Echarts-java類庫應用

   ECharts,縮寫來自Enterprise Charts,商業級數據圖表,來自百度的一款開源、功能強大的數據可視化產品,從官網的example中可以看到能夠實現目前見到的各種圖形報表,並且帶有詳細的代碼和圖形demohttp://echarts.baidu.com/doc/example.html

  不過我們通常不會像demo中那樣綁定死數據,我們通常需要從數據庫中獲取數據,再展示出來,我們先看綁定靜態數據的demo,通過代碼分析如何綁定動態數據。


綁定靜態數據(官網)

以條形圖爲例:

JS綁定數據

    <script type="text/javascript">
        // 路徑配置
        require.config({
            paths: {
                echarts: 'http://echarts.baidu.com/build/dist'
            }
        });
        
        // 使用
        require(
            [
                'echarts',
                'echarts/chart/bar' // 使用柱狀圖就加載bar模塊,按需加載
            ],
            function (ec) {
                // 基於準備好的dom,初始化echarts圖表
                var myChart = ec.init(document.getElementById('main')); 
            
				var option = {
					title : {
						text: '平臺交易額',
						subtext: ''
					},
					tooltip : {
						trigger: 'axis'
					},
					legend: {
						data:['2015年']
					},
					toolbox: {
						show : true,
						feature : {
							mark : {show: true},
							dataView : {show: true, readOnly: false},
							magicType: {show: true, type: ['line', 'bar']},
							restore : {show: true},
							saveAsImage : {show: true}
						}
					},
					calculable : true,
					xAxis : [
						{
							type : 'value',
							boundaryGap : [0, 0.01]
						}
					],
					yAxis : [
						{
							type : 'category',
							data : ['1月','2月','3月','4月','5月','總']
						}
					],
					series : [
						{
							name:'2015年',
							type:'bar',
							data:[48203, 53489, 119034, 184970, 231744, 630230]
						}
					]
				};
   
				// 爲echarts對象加載數據 
                myChart.setOption(option); 
            }
        );
    </script>

  其中最關係的就是其中的option如何動態加載數據。其實無非就是拼串,我們既可以在前臺去拼也可以在後臺拼接成json串返回頁面。如果整個項目只需要一種圖表,我們拼一拼也無所謂,但是要應對以後的圖形變化,或者新增圖形,每種圖形都拼一遍肯定是麻煩,也不符合面向對象的特點,既然如此,我們就需要把option變成對象去管理。
  個人對Echarts其中各個圖表的option不是很熟,而網上也已經有了很成熟的類庫,簡單學習即可,源碼:

   http://git.oschina.net/free/ECharts/tree/master/src/main/java/com/github/abel533/echarts/


下面以springmvc框架來再次實現動態數據加載

controller

    @RequestMapping("/example")  
    public  class example{
    @ResponseBody  
    public WebResult getOption() throws Exception {  
        WebResult result = new WebResult();  
        try {  
            Option option = injuryService.selectRemoveCauses();  
            result.isOK();  
            result.setData(option);  
        } catch (BusinessException e) {  
            result.setException(e);  
        }  
        return result;  
    } 

Service邏輯處理

Public class exampleService{
    @Override  
    public Option getOption() throws BusinessException {  
        //查詢前20  
        PageHelper.startPage(1, 20, false);  
        //數據庫查詢獲取統計數據  
        List<Map<String, Object>> list = exampleDao.getOption();  
        //爲了數據從大到小排列,這裏需要倒敘  
        Collections.sort(list, new Comparator<Map<String, Object>>() {  
            @Override  
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {  
                return -1;  
            }  
        });  
        //創建Option  
        Option option = new Option();  
        option.title("平臺交易額").tooltip(Trigger.axis).legend("2015年");  
        //橫軸爲值軸  
        option.xAxis(new ValueAxis().boundaryGap(0d, 0.01));  
        //創建類目軸  
        CategoryAxis category = new CategoryAxis();  
        //柱狀數據  
        Bar bar = new Bar("2015年");  
        //循環數據  
        for (Map<String, Object> objectMap : list) {  
            //設置類目  
            category.data(objectMap.get("NAME"));  
            //類目對應的柱狀圖  
            bar.data(objectMap.get("TOTAL"));  
        }  
        //設置類目軸  
        option.yAxis(category);  
        //設置數據  
        option.series(bar);  
        //返回Option  
        return option;  
    }  
}

Dao數據訪問

代碼略,從數據庫獲取需要的數據即可

Jsp頁面

    <body style="padding:0">  
    <div style="padding:10px;clear: both;">  
        <div id="example" style="height:600px;"></div>  
    </div>  
    </body>  
    <script src="echarts/echarts-all.js"></script>  
    <script type="text/javascript">  
        //圖表  
        var exampleChar = echarts.init(document.getElementById('example'));  
      
        //查詢  
        function loadDrugs() {  
            psLineChar.clear();  
            psLineChar.showLoading({text: '正在努力的讀取數據中...'});  
            $.getJSON('example.htm', function (data) {  
                if (data.success) {  
                    exampleChar.setOption(data.data, true);  
                    exampleChar.hideLoading();  
                } else {  
                    alert('提示', data.msg);  
                }  
            });  
        }  
        //載入圖表  
        loadDrugs();  
    </script> 

不敢哪種圖表,其中變化的就是option的參數,學會了一種,其他的也就很容易實現。

Echarts是一個開源的圖形報表,Echarts-java類庫也是一個開源的類庫,開源使他們發展的很快,也更有益於我們的應用和開發。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章