1. 程式人生 > >Echarts 配置

Echarts 配置

Echarts使用心得總結(二)
前言:
前一段時間一直都挺忙的,各種事,也沒來得及每週的總結,趁著晚上的一點時間把專案中用的Echart中常用的各種圖表給抽象總結了一下,趁著週末跟大家分享一下。之前寫過一篇相關的文章,當時主要是講了如何引入、使用Echart,最新的Echart版本已經發布,之前講的很多檔案都可以刪除了,下邊會一一給大家細講。

為了更好的講解如何使用這個圖形渲染外掛,我會通過建立一個解決方案的形式一點點給大家講解清楚。

1.  EChart最新的文件目錄。
首先建立一個解決方案,目錄如下:

之前的一篇文章中講到如果要使用Echarts還要下載相關的ZRender的渲染包,最新的版本已經將這些合併在一起了,只需要引用圖中紅框標註的echarts資料夾下的檔案即可。各檔案的作用如下:

l  Echarts-map.js :主要用來渲染跟地圖相關

l  Echarts.js :基本的常規圖形相關

l  Esl.js :影象引擎

Statics資料夾下的ECharts.js檔案,為我自己抽象總結出來的用於Echarts的配置檔案載入、資料處理、初始化各種影象型別的配置、影象渲染的一些方法。

2.  抽象之後的Echarts。
根據Echarts官網的講解,我把Echarts的使用歸結為一下的幾個步驟,同時這些步驟相應的實現對應到Statics資料夾下的Echarts.js,該檔案的主要程式碼目錄如下:

Var ECharts={
 
ChartConfig:function(container,option){ …..},//載入Echarts配置檔案
 
ChartDataFormate:{….},//資料格式化
 
ChartOptionTemplates:{….},//初始化常用的圖表型別
 
Charts:{ RenderChart:function(option){….},//渲染圖表
 
RenderMap:function(option){…}//渲染地圖
 
}
 
};
  

2.1 Echarts配置檔案的引入

在開始使用時,首先需要引入Echarts 的配置檔案,也就是要載入基本的影象型別,我們可以在每一個頁面都引入,但是這樣抽象化程度不高,重複使用率也不高,只需要有一個配置項在每次引用的時候載入一下即可,對應到具體的程式碼實現,如下:

ChartConfig: function (container, option) { //container:為頁面要渲染圖表的容器,option為已經初始化好的圖表型別的option配置
 
        var chart_path = "/Statics/echarts/echarts"; //配置圖表請求路徑
 
        var map_path = "/Statics/echarts/echarts-map";//配置地圖的請求路徑
 
        require.config({//引入常用的圖表型別的配置
 
            paths: {
 
                echarts: chart_path,
 
                'echarts/chart/bar': chart_path,
 
                'echarts/chart/pie': chart_path,
 
                'echarts/chart/line': chart_path,
 
                'echarts/chart/k': chart_path,
 
                'echarts/chart/scatter': chart_path,
 
                'echarts/chart/radar': chart_path,
 
                'echarts/chart/chord': chart_path,
 
                'echarts/chart/force': chart_path,
 
                'echarts/chart/map': map_path
 
            }
 
        });
 
        this.option = { chart: {}, option: option, container: container };
 
        return this.option;
 
    }
 
 
  

2.2 資料格式化
為了能夠更好的展現各種的資料,在進行圖表的option配置之前,需要先對從後臺請求過來的資料進行格式化。後臺返回的資料必須是json格式的資料,且資料型別只能為以下兩種型別:

       Result1=[{name:XXX,value:XXX},{name:XXX,value:XXX}….]

       Result2=[{name:XXX,group:XXX,value:XXX},{name:XXX,group:XXX,value:XXX]

具體的程式碼實現如下:

ChartDataFormate: {
 
        FormateNOGroupData: function (data) {//data的格式如上的Result1,這種格式的資料,多用於餅圖、單一的柱形圖的資料來源
 
            var categories = [];
 
            var datas = [];
 
            for (var i = 0; i < data.length; i++) {
 
                categories.push(data[i].name || "");
 
                datas.push({ name: data[i].name, value: data[i].value || 0 });
 
            }
 
            return { category: categories, data: datas };
 
        },
 
        FormateGroupData: function (data, type, is_stack) {//data的格式如上的Result2,type為要渲染的圖表型別:可以為line,bar,is_stack表示為是否是堆積圖,這種格式的資料多用於展示多條折線圖、分組的柱圖
 
            var chart_type = 'line';
 
            if (type)
 
                chart_type = type || 'line';
 
            var xAxis = [];
 
            var group = [];
 
            var series = [];
 
            for (var i = 0; i < data.length; i++) {
 
                for (var j = 0; j < xAxis.length && xAxis[j] != data[i].name; j++);
 
                if (j == xAxis.length)
 
                    xAxis.push(data[i].name);
 
                for (var k = 0; k < group.length && group[k] != data[i].group; k++);
 
                if (k == group.length)
 
                    group.push(data[i].group);
 
            }
 
 
 
            for (var i = 0; i < group.length; i++) {
 
                var temp = [];
 
                for (var j = 0; j < data.length; j++) {
 
                    if (group[i] == data[j].group) {
 
                        if (type == "map")
 
                            temp.push({ name: data[j].name, value: data[i].value });
 
                        else
 
                            temp.push(data[j].value);
 
                    }
 
                }
 
                switch (type) {
 
                    case 'bar':
 
                        var series_temp = { name: group[i], data: temp, type: chart_type };
 
                        if (is_stack)
 
                            series_temp = $.extend({}, { stack: 'stack' }, series_temp);
 
                        break;
 
                    case 'map':
 
                        var series_temp = {
 
                            name: group[i], type: chart_type, mapType: 'china', selectedMode: 'single',
 
                            itemStyle: {
 
                                normal: { label: { show: true} },
 
                                emphasis: { label: { show: true} }
 
                            },
 
                            data: temp
 
                        };
 
                        break;
 
                    case 'line':
 
                        var series_temp = { name: group[i], data: temp, type: chart_type };
 
                        if (is_stack)
 
                            series_temp = $.extend({}, { stack: 'stack' }, series_temp);
 
                        break;
 
                    default:
 
                        var series_temp = { name: group[i], data: temp, type: chart_type };
 
                }
 
                series.push(series_temp);
 
            }
 
            return { category: group, xAxis: xAxis, series: series };
 
        },
  

 
  

2.3 各種圖表型別的配置初始化

在通過2.2步驟將從後臺獲得的資料進行初始化之後,我們就可以進行圖表的option的配置了,在這裡我主要對常用的餅圖、柱圖(單一、分組、堆積柱圖)、折線圖(分組、堆積折線圖)、柱圖+折線(增幅)圖、中國地圖等圖進行了配置項的初始化。具體實現如下:

ChartOptionTemplates: {
 
        CommonOption: {//通用的圖表基本配置
 
            tooltip: {
 
                trigger: 'axis'//tooltip觸發方式:axis以X軸線觸發,item以每一個數據項觸發
 
            },
 
            toolbox: {
 
                show: true, //是否顯示工具欄
 
                feature: {
 
                    mark: true,
 
                    dataView: { readOnly: false }, //資料預覽
 
                    restore: true, //復原
 
                    saveAsImage: true //是否儲存圖片
 
                }
 
            }
 
        },
 
        CommonLineOption: {//通用的折線圖表的基本配置
 
            tooltip: {
 
                trigger: 'axis'
 
            },
 
            toolbox: {
 
                show: true,
 
                feature: {
 
                    dataView: { readOnly: false }, //資料預覽
 
                    restore: true, //復原
 
                    saveAsImage: true, //是否儲存圖片
 
                    magicType: ['line', 'bar']//支援柱形圖和折線圖的切換
 
                }
 
            }
 
        },
 
        Pie: function (data, name) {//data:資料格式:{name:xxx,value:xxx}...
 
            var pie_datas = ECharts.ChartDataFormate.FormateNOGroupData(data);
 
            var option = {
 
                tooltip: {
 
                    trigger: 'item',
 
                    formatter: '{b} : {c} ({d}/%)',
 
                    show: true
 
                },
 
                legend: {
 
                    orient: 'vertical',
 
                    x: 'left',
 
                    data: pie_datas.category
 
                },
 
                series: [
 
                    {
 
                        name: name || "",
 
                        type: 'pie',
 
                        radius: '65%',
 
                        center: ['50%', '50%'],
 
                        data: pie_datas.data
 
                    }
 
                ]
 
            };
 
            return $.extend({}, ECharts.ChartOptionTemplates.CommonOption, option);
 
        },
 
Lines: function (data, name, is_stack) { //data:資料格式:{name:xxx,group:xxx,value:xxx}...
 
            var stackline_datas = ECharts.ChartDataFormate.FormateGroupData(data, 'line', is_stack);
 
            var option = {
 
                legend: {
 
                    data: stackline_datas.category
 
                },
 
                xAxis: [{
 
                    type: 'category', //X軸均為category,Y軸均為value
 
                    data: stackline_datas.xAxis,
 
                    boundaryGap: false//數值軸兩端的空白策略
 
                }],
 
                yAxis: [{
 
                    name: name || '',
 
                    type: 'value',
 
                    splitArea: { show: true }
 
                }],
 
                series: stackline_datas.series
 
            };
 
            return $.extend({}, ECharts.ChartOptionTemplates.CommonLineOption, option);
 
        },
 
Bars: function (data, name, is_stack) {//data:資料格式:{name:xxx,group:xxx,value:xxx}...
 
            var bars_dates = ECharts.ChartDataFormate.FormateGroupData(data, 'bar', is_stack);
 
            var option = {
 
                legend: bars_dates.category,
 
                xAxis: [{
 
                    type: 'category',
 
                    data: bars_dates.xAxis,
 
                    axisLabel: {
 
                        show: true,
 
                        interval: 'auto',
 
                        rotate: 0,
 
                        margion: 8
 
                    }
 
                }],
 
                yAxis: [{
 
                    type: 'value',
 
                    name: name || '',
 
                    splitArea: { show: true }
 
                }],
 
                series: bars_dates.series
 
            };
 
            return $.extend({}, ECharts.ChartOptionTemplates.CommonLineOption, option);
 
        },
 
  ……..//其他的圖表配置,如柱圖+折線、地圖
 
……..
 
 
 
}
  

  

 

2.4 圖形的渲染
在配置好圖表型別的option之後,就可進行圖表的渲染了,具體的程式碼實現如下:

Charts: {
 
        RenderChart: function (option) {
 
            require([
 
                'echarts',
 
                'echarts/chart/line',
 
                'echarts/chart/bar',
 
                'echarts/chart/pie',
 
                'echarts/chart/k',
 
                'echarts/chart/scatter',
 
                'echarts/chart/radar',
 
                'echarts/chart/chord',
 
                'echarts/chart/force',
 
                'echarts/chart/map'
 
              ],
 
              function (ec) {
 
                  echarts = ec;
 
                  if (option.chart && option.chart.dispose)
 
                      option.chart.dispose();
 
                  option.chart = echarts.init(option.container);
 
                  window.onresize = option.chart.resize;
 
                  option.chart.setOption(option.option, true);
 
              });
 
        },
 
        ……..//渲染其他的圖表型別,如:地圖
 
        ……..
 
        }
 
 
  

3.  具體頁面的使用

經過2步驟中的一些列的配置、處理、初始化,我們就可以具體的使用了,在每一個aspx頁面使用之前,我們首先需要在頁面的標題引入以下的檔案:

    

    <script src="/Scripts/jquery-1.4.1.js" type="text/javascript"></script>
 
    <script src="/Statics/echarts/esl.js" type="text/javascript"></script>
 
    <script src="/Statics/ECharts.js" type="text/javascript"></script>
  

引入之後就可進行使用了,下面演示幾個常用的圖表的使用:

首頁每個aspx頁面上都有一個div用來做渲染圖表的容器,如下:

<div id="echart" style="width:100%; height:400px;"></div>

 

3.1 餅圖
3.1.1 實現程式碼
<script type="text/javascript">
 
    $(
 
      function () {
 
          var data = [{ name: 'olive', value: 20 }, { name: 'only', value: 20 }, { name: 'momo', value: 20}];
 
          var option = ECharts.ChartOptionTemplates.Pie(data);
 
          var container = $("#echart")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
      }
 
    );
 
</script>
  

 

3.1.2 展示效果
 

3.2 柱圖
3.2.1 實現程式碼
<script type="text/javascript">
 
    $(
 
      function () {
 
          var data = [{ name: 'olive', value: 20 }, { name: 'only', value: 20 }, { name: 'momo', value: 20}];
 
          var option = ECharts.ChartOptionTemplates.Bar(data);
 
          var container = $("#echart")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
      }
 
);
 
$(
 
      function () {
 
          var data = [{ name: '2014-01', value: 20, group: 'A' }, { name: '2014-01', value: 40, group: 'B' }, { name: '2014-02', value: 30, group: 'A' }, { name: '2014-02', value: 10, group: 'B' }, { name: '2014-03', value: 200, group: 'A' }, { name: '2014-03', value: 60, group: 'B' }, { name: '2014-04', value: 50, group: 'A' }, { name: '2014-04', value: 45, group: 'B' }, { name: '2014-05', value: 110, group: 'A' }, { name: '2014-05', value: 80, group: 'B' }, { name: '2014-06', value: 90, group: 'A' }, { name: '2014-06', value: 60, group: 'B'}];
 
          var option = ECharts.ChartOptionTemplates.Bars(data,'Love');
 
          var container = $("#echart")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
 
 
          var option = ECharts.ChartOptionTemplates.Bars(data, 'Love', true);
 
          var container = $("#echart1")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
      }
 
    );
 
 
 
</script>
 
 
  

3.2.2展示效果

 

 

3.3 折線圖
3.3.1 實現程式碼
<script type="text/javascript">
 
        $(function () {
 
            var data = [
 
            { name: '2013-01', group: 'olive', value: 116 },
 
            { name: '2013-01', group: 'momo', value: 115 },
 
            { name: '2013-01', group: 'only', value: 222 },
 
            { name: '2013-01', group: 'for', value: 324 },
 
            { name: '2013-02', group: 'olive', value: 156 },
 
            { name: '2013-02', group: 'momo', value: 185 },
 
            { name: '2013-02', group: 'only', value: 202 },
 
            { name: '2013-02', group: 'for', value: 34 },
 
            { name: '2013-03', group: 'olive', value: 16 },
 
            { name: '2013-03', group: 'momo', value: 51 },
 
            { name: '2013-03', group: 'only', value: 22 },
 
            { name: '2013-03', group: 'for', value: 84 }
 
            ];
 
            var opt = HighChart.ChartOptionTemplates.Line(data, 'Love-Rate', "折線圖示例");
 
            var container = $("#container");
 
            HighChart.RenderChart(opt, container);
 
        });
 
       $(
 
      function () {
 
          var data = [{ name: '2014-01', value: 20, group: 'A' }, { name: '2014-01', value: 40, group: 'B' }, { name: '2014-02', value: 30, group: 'A' }, { name: '2014-02', value: 10, group: 'B' }, { name: '2014-03', value: 200, group: 'A' }, { name: '2014-03', value: 60, group: 'B' }, { name: '2014-04', value: 50, group: 'A' }, { name: '2014-04', value: 45, group: 'B' }, { name: '2014-05', value: 110, group: 'A' }, { name: '2014-05', value: 80, group: 'B' }, { name: '2014-06', value: 90, group: 'A' }, { name: '2014-06', value: 60, group: 'B'}];
 
          var option = ECharts.ChartOptionTemplates.Lines(data,'lines',false);
 
          var container = $("#echart")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
 
 
          var option = ECharts.ChartOptionTemplates.Lines(data, 'lines', true);
 
          var container = $("#echart1")[0];
 
          opt = ECharts.ChartConfig(container, option);
 
          ECharts.Charts.RenderChart(opt);
 
      }
 
    );
 
 
 
    </script>
 
 
  

3.3.2展示效果

 

 

3.4 柱圖+折線(增幅)圖
3.4.1 展示效果
 

3.5 地圖
3.5.3 展示效果


 

到這裡,基本就把echart的抽象跟使用講完了,因為時間的關係,還有一些圖形的配置、資料處理沒有列出程式碼,但是基本上實現都差不多。希望能給大家帶來一些幫助和啟發。後續會繼續推出HightCharts的抽象使用,敬請期待。
--------------------- 
作者:墨遙 
來源:CSDN 
原文:https://blog.csdn.net/xuemoyao/article/details/22602837 
版權宣告:本文為博主原創文章,轉載請附上博文連結!