ECHarts.js


(一)EChart.js 簡單入門

最近有一個統計的項目要做,在前端的數據需要用圖表的形式展示。網上搜索了一下,發現有幾種統計圖庫。

MSChart  

這個是Visual Studio里的自帶控件,使用比較簡單,不過數據這塊需要在后台綁定。

ichartjs

是一款基於HTML5的圖形庫。使用純javascript語言, 利用HTML5的canvas標簽繪制各式圖形。 支持餅圖、環形圖、折線圖、面積圖、柱形圖、條形圖等。

Chart.js

也是一款基於HTML5的圖形庫和ichartjs整體類似。不過Chart.js的教程文檔沒有ichartjs的詳細。不過感覺在對於移動的適配上感覺比ichartjs要好一點。

ECharts.js

這是我准備在這個項目中使用的圖形庫,這也是一款基於HTML5的圖形庫。圖形的創建也比較簡單,直接引用Javascript即可。使用這個庫的原因主要有三點,一個是因為這個庫是百度的項目,而且一直有更新,目前最新的是EChart 3;第二個是這個庫的項目文檔比較詳細,每個點都說明的比較清楚,而且是中文的,理解比較容易;第三點是這個庫支持的圖形很豐富,並且可以直接切換圖形,使用起來很方便。

官網:ECharts.js

下面來簡單說明一下EChart.js的使用。

第一步,引用Js文件

<script type="text/javascript" src="js/echarts.js"></script>

js文件有幾個版本,可以根據實際需要引用需要的版本。下載鏈接

第二步,准備一個放圖表的容器

<div id="chartmain" style="width:600px; height: 400px;"></div>

第三步,設置參數,初始化圖表

<script type="text/javascript">
        //指定圖標的配置和數據
        var option = {
            title:{
                text:'ECharts 數據統計'
            },
            tooltip:{},
            legend:{
                data:['用戶來源']
            },
            xAxis:{
                data:["Android","IOS","PC","Ohter"]
            },
            yAxis:{

            },
            series:[{
                name:'訪問量',
                type:'line',
                data:[500,200,360,100]
            }]
        };
        //初始化echarts實例
        var myChart = echarts.init(document.getElementById('chartmain'));

        //使用制定的配置項和數據顯示圖表
        myChart.setOption(option);
    </script>

這樣簡單的一個統計圖表就出來了,官網使用的柱狀圖,我這邊改用了折線圖。

 

 柱狀圖其實也很簡單,只要修改一個參數就可以了。把series里的type 值修改為"bar"

 餅圖和折線圖、柱狀圖有一點區別。主要是在參數和數據綁定上。餅圖沒有X軸和Y軸的坐標,數據綁定上也是采用value 和name對應的形式。

        var option = {
            title:{
                text:'ECharts 數據統計'
            },            
            series:[{
                name:'訪問量',
                type:'pie',    
                radius:'60%', 
                data:[
                    {value:500,name:'Android'},
                    {value:200,name:'IOS'},
                    {value:360,name:'PC'},
                    {value:100,name:'Ohter'}
                ]
            }]
        };

 

 

Echarts 數據綁定

簡單的統計表已經可以生成,不過之前圖標數據都是直接寫在參數里面的,而實際使用中,我們的數據一般都是異步讀取的。EChart.js對於數據異步讀取這塊提供了異步加載的方法。

綁定多組數據

很多時候需要展示的數據不單單是一組數據,很多時候會進行一個數據對比。這個時候只需要在series中增加一組數據,legend中添加一下這個數據組的name

<!DOCTYPE html>
<html>
<head>
    <title>ECharts.js 數據綁定</title>
    <meta charset="utf-8">
    <script type="text/javascript" src="js/echarts.js"></script>
</head>
<body>
    <div id="chartmain" style="width:600px; height: 400px;"></div>
    <script type="text/javascript">
        //指定圖標的配置和數據
        var option = {
            title:{
                text:'ECharts 數據統計'
            },
            legend:{
                data:['訪問量','用戶量']
            },
            xAxis:{
                data:["Android","IOS","PC","Other"]
            },
            yAxis:{},
            series:[ { name:'訪問量', type:'bar', data:[180,420,333,83] }, { name:'用戶量', type:'bar', data:[125,330,230,60] }
            ]
        };
        //初始化echarts實例
        var myChart = echarts.init(document.getElementById('chartmain'));

        //使用制定的配置項和數據顯示圖表
        myChart.setOption(option);
    </script>
</body>
</html>

效果展示

(二)數據異步加載

EChart中實現異步數據的更新非常簡單,在圖表初始化后不管任何時候只要通過 jQuery 等工具異步獲取數據后通過 setOption 填入數據和配置項就行。

綁定數據的方式有兩種,一種是寫寫好一些圖表參數,然后數據留空,然后在異步讀取數據的時候,綁定數據。還有一種就是直接異步讀取數據的時候同時設置圖表參數和數據綁定。

首先我們准備一份需要加載的數據文件data.json,數據內容:

{"name":["Android","IOS","PC","Other"],"data":[420,200,360,100]}

第一種異步加載的時候設置圖表參數和綁定數據

    <script type="text/javascript">        
        //初始化echarts實例
        var myChart = echarts.init(document.getElementById('chartmain'));        
        //異步加載的配置項和數據顯示圖表
        $.get('data.json').done(function (data) {
            data = eval('('+data+')');            
            myChart.setOption({
                title:{
                    text:'ECharts 異步加載數據'
                },
                tooltip:{},
                legend:{
                    data:['訪問量']
                },
                xAxis:{
                    data:data.name
                },
                yAxis:{},
                series:[
                    {
                        name:'訪問量',
                        type:'bar',
                        data:data.data
                    }
                ]
            })
        })


    </script>

第二種先設置圖表參數,后綁定數據

<script type="text/javascript">        
        //初始化echarts實例
        var myChart = echarts.init(document.getElementById('chartmain'));        
        //設置圖標配置項
        myChart.setOption({
            title:{
                text:'ECharts 異步加載數據'
            },
            tooltip:{},
            legend:{
                data:['訪問量']
            },
            xAxis:{
                data:[]
            },
            yAxis:{},
            series:[
                {
                    name:'訪問量',
                    type:'bar',
                    data:[]
                }
            ]
        })
        //異步加載數據
        $.get('data.json').done(function (data) {
            data = eval('('+data+')');            
            myChart.setOption({                
                xAxis:{
                    data:data.name
                },                
                series:[
                    {    
                        //根據名字對應到相應的系列
                        name:"訪問量",
                        data:data.data
                    }
                ]
            })
        })
    </script>

效果展示

 因為是異步加載,所以有時候數據加載會慢,或者延遲。在數據沒有加載前,圖表這樣的。面對這樣的圖表,肯定會覺得這是沒有數據嗎,還是圖表有問題.對於這塊ECharts增加了一個加載動畫。

Loading動畫加載

        //打開loading動畫
        myChart.showLoading();
        //加載數據函數
        function bindData(){
            //為了效果明顯,我們做了延遲讀取數據
            setTimeout(function(){                
                //異步加載數據
                $.get('data.json').done(function (data) {                    
                    //獲取數據后,隱藏loading動畫
                    myChart.hideLoading();
                    data = eval('('+data+')');            
                    myChart.setOption({
                        xAxis:{
                            data:data.name
                        },
                        series:[
                            {
                                //根據名字對應到相應的系列
                                name:"訪問量",
                                data:data.data
                            }
                        ]
                    })
                })
            },2000)
        }
        
        bindData();        

效果展示

數據動態實時更新

<script type="text/javascript">        
    //初始化echarts實例
    var myChart = echarts.init(document.getElementById('chartmain'));
    var base = + new Date(2017,3,8);
    var oneDay = 24*3600*1000;
    var date = [];
    var data = [Math.random()*150];
    var now = new Date(base);
    var day = 30;
    function addData(shift){
        now = [now.getFullYear(),now.getMonth()+1,now.getDate()].join('/');        
        date.push(now);        
        data.push((Math.random()-0.5)*10+data[data.length-1]);
        if (shift) {
            console.log(data);
            date.shift();
            data.shift();
        }
        now = new Date(+new Date(now)+oneDay);        
    }

    for (var i = 0; i < day; i++) {
        addData();
    }
    //設置圖標配置項
    myChart.setOption({
        title:{
            text:'ECharts 30天內數據實時更新'
        },
        xAxis:{
            type:"category",
            boundaryGap:false,
            data:date
        },
        yAxis:{
            boundaryGap:[0,'100%'],
            type:'value'
        },
        series:[{
            name:'成交',
            type:'line',
            smooth:true, //數據光滑過度
            symbol:'none', //下一個數據點
            stack:'a',
            areaStyle:{
                normal:{
                    color:'red'
                }
            },
            data:data
        }]
    })
    setInterval(function(){
        addData(true);
        myChart.setOption({
            xAxis:{
                data:date
            },
            series:[{
                name:'成交',
                data:data
            }]
        });
    },1000)
</script>

效果展示

(三)ECharts.js 交互組件

ECharts.js有很多的交互組件,一般經常用到的組件有這些:

  title:標題組件,包含主標題和副標題。

  legend:圖例組件,展現了不同系列的標記(symbol),顏色和名字。可以通過點擊圖例控制哪些系列不顯示。

  xAxis:直角坐標系 grid 中的 x 軸,一般情況下單個 grid 組件最多只能放左右兩個 x 軸,多於兩個 x 軸需要通過配置 offset 屬性防止同個位置多個 x 軸的重疊。

  yAxis:直角坐標系 grid 中的 y 軸,一般情況下單個 grid 組件最多只能放左右兩個 y 軸,多於兩個 y 軸需要通過配置 offset 屬性防止同個位置多個 Y 軸的重疊。

  tooltip:提示框組件,就是當你的鼠標懸浮在圖表上的提示內容。

  toolbox:工具欄組件。內置有導出圖片、數據視圖、動態類型切換、數據區域縮放、重置五個工具。

  series:系列列表。我理解為數據列表。這里可以定義每組數據內容,以及數據的展現形式。

  timeline:提供了在多個ECharts option 之間進行切換、播放等操作的功能。

  dataZoom:用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。

  ....

官方給出的案例是dataZoom組件。它是用於區域縮放,從而能自由關注細節的數據信息,或者概覽數據整體,或者去除離群點的影響。主要是對 數軸(axis) 進行操作。

效果展示

 

toolbox組件

其中很多組件其實我們都會用到,不過使用的都是一些基本配置。比如title組件,往往只寫一個text 值。legend,會一些每個系列數據的name等等。

因為后面項目需要將圖表保存為圖片,以及一種數據多種展現形勢,所以就研究一下toolbox組件的使用。

toolbox參數:

show:工具欄默認是隱藏的。所以一定要設置show為true顯示出來。

orient:工具欄的的布局方向,可選值有horizontal(橫向)和vertical(豎向)。默認值是horizontal

itemSize:工具欄的大小。默認值是15。

itemGap:工具欄每個工具之間的距離,默認值是10。

showTitle:鼠標懸浮的是否顯示每個工具的說明,默認是true。

feature:這個是設置工具欄里要顯示哪些工具,以及這些工具的樣式等。

  默認的插件工具:

    savaAsImage:保存圖片

    restore:還原配置

    dataView:數據視圖工具,可以展現圖表所用的數據,並且可以編輯數據,再將編輯后的數據展示出來。同時也可以設置為數據為只讀。

      optionToContent:並且可以通過對顯示出來的數據進行排版編輯,以HTML展現。

      optionToOption:在使用 optionToContent 的情況下,如果支持數據編輯后的刷新,需要自行通過該函數實現組裝 option 的邏輯。

    dataZoom:數據區域縮放。目前只支持直角坐標系的縮放。

      xAxisIndex、yAxisIndex:分別控制xAxis和yAxis軸的縮放。

  除了使用默認的工具意外,我們還可以根據需求自定義工具。需要注意的是,每個自定義的工具,名稱必須以“my”打頭。在onclick函數中編寫需要進行的操作。

 

toolbox:{
    show:true,
    orient:'vertical',                
    feature:{
        magicType:{type:['line','bar']},
        restore:{},
        saveAsImage:{},
        dataZoom:{
            show:true,
            xAxisIndex:[0,3]
        },
        myTool1:{
            show:true,
            title:'自定義工具一',
            icon: 'path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891',
            
            onclick:function(){
                alert("this is myTool1");
            }
        },
        myTool2:{
            show:true,
            title:'自定義工具二',
            icon: 'image://http://echarts.baidu.com/images/favicon.png',                        
            onclick:function(){
                alert("this is myTool2");
            }
        }
    }
}

  

magicType:設置可切換的圖表類型。目前支持的只有4種,line折線圖、bar柱狀圖、stack堆疊模式、tiled平鋪模式。

brush:選框組件的控制按鈕。

iconStyle:公用的icon樣式設置

zlevel:所有圖形的zlevel值。zlevel用於Canvas分層。

z:所有圖形的z值。z不會創建Canvas層。比zlevel等級低。

left、top、right、bottom、width、height:工具欄的樣式,邊距設置。

  

 

<script type="text/javascript">        
    //初始化echarts實例
    var myChart = echarts.init(document.getElementById('chartmain'));    

    var option = {
        title:{
            text:"馬雲和馬化騰期末成績圖",
            subtext:'本圖表純屬虛構',                
        },
        anmation:false,
        legend:{
            data:["馬雲成績","馬化騰成績"],
            left:'50%',
            top:5
        },
        tooltip:{
            trigger:"axis"
        },
        xAxis:{
            type:'category',
            boundaryGap:false,
            data:['語文','數學','英語','歷史','體育','生物','化學']
        },
        yAxis:{
            type:'value',
            axisLabel:{
                formatter:'{value}分'
            },
            min:20
        },
        toolbox:{
            show:true,
            orient:'vertical',
            itemSize:20,
            itemGap:20,

            feature:{
                dataView:{
                    readOnly:true,
                    backgroundColor:'#f5f5f5',
                    optionToContent:function(opt){
                        var axisData = opt.xAxis[0].data;
                        var series = opt.series;
                        var table ='<table style="width:100%;text-align:center;border:1px solid red;"><tbody><tr>'
                                    +'<td>學生</td>'
                                    +'<td>'+series[0].name+'</td>'
                                    +'<td>'+series[1].name+'</td>'
                                    +'</tr>';
                        for (var i = 0; i < axisData.length; i++) {
                            table +='<tr>'
                                    +'<td>'+axisData[i]+'</td>'
                                    +'<td>'+series[0].data[i]+'</td>'
                                    +'<td>'+series[1].data[i]+'</td>'
                                    +'</tr>'
                        }
                        table +='</tbody></table>';
                        return table;
                    }                        
                },
                dataZoom:{
                    show:true,
                    xAxisIndex:[0,3]
                },
                magicType:{type:['line','bar','stack','tiled']},
                restore:{},
                saveAsImage:{},                    
                myTool1:{
                    show:true,
                    title:'自定義工具一',
                    icon: 'path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891',
                    
                    onclick:function(){
                        alert("this is myTool1");
                    }
                },
                myTool2:{
                    show:true,
                    title:'自定義工具二',
                    icon: 'image://http://echarts.baidu.com/images/favicon.png',                        
                    onclick:function(){
                        alert("this is myTool2");
                    }
                }
                
            },            

        },
        series:[
            {
                name:'馬雲成績',
                type:'line',
                data:[90,88,75,82,95,89,97],
                markLine:{
                    data:[{type:'average',name:'平均值'}]
                },
                markPoint:{
                    data:[
                        {type:'max',name:'最高分'},
                        {type:'min',name:'最低分'}
                    ]
                }                    
            },
            {
                name:'馬化騰成績',
                type:'line',
                data:[55,45,99,60,35,45,74],
                markLine:{
                    data:[{type:'average',name:'平均值'}]
                },
                markPoint:{
                    data:[
                        {type:'max',name:'最高分'},
                        {type:'min',name:'最低分'}
                    ]
                }
            }
        ]
    }

    myChart.setOption(option);
</script>

 

 

效果展示

(四)ECharts.js 移動端顯示

現在很多時候,我們是在用手機、pad等一些移動端設備來進行辦公獲取數據。所以我們的圖表很多時候是需要用移動端設置來查看的,而我們的圖表有時候因為數據的偏多,會出現遮擋和重疊的情況。這個時候就需要對移動端的圖標顯示做一些優化,ECharts對於移動端的優化和支持主要有2個方面。

一、ECharts組件的定位和布局

組件的定位官方描寫的比較詳細也比較全,我的簡單理解為,ECharts.js對於圖表里面每個組件和工具都采用了兩種尺寸單位和設置固定位置。

一種是比較直接的 像素(px),設置的時間直接以 number 形式填寫。比如

title:{
    text:'ECharts 數據統計',
    top:20
}

 

這里就是設置標題組件的距離上面的高度是20px。

還有一種是安裝百分比(%)的形式來設置的,百分比值是 string 類型,需要加上引號。比如

legend:{
    data:['訪問量','用戶量'],
    left:'50%'
}

 

這里標識legend組件的位置距離左側的距離是整個圖表的50%寬度

另外可以通過固定的值來設置所在位置,比如:

  • 可以設置 left: 'center',表示水平居中。
  • 可以設置 top: 'middle',表示垂直居中。

另外針對不同類型的圖標還有不同的定位方式。

 

布局這塊可以簡單歸結為兩種,一種是 橫向(horizontal)顯示,一種是 縱向(vertical)顯示。

 

二、ECharts自適應能力Media Query

Media Query 提供了『隨着容器的尺寸改變而改變』的能力。

option = {
    baseOption: { // 這里是基本的『原子option』。
        title: {...},
        legend: {...},
        series: [{...}, {...}, ...],
        ...
    },
    media: [ // 這里定義了 media query 的逐條規則。
        {
            query: {...},   // 這里寫規則。
            option: {       // 這里寫此規則滿足下的option。
                legend: {...},
                ...
            }
        },
        {
            query: {...},   // 第二個規則。
            option: {       // 第二個規則對應的option。
                legend: {...},
                ...
            }
        },
        {                   // 這條里沒有寫規則,表示『默認』,
            option: {       // 即所有規則都不滿足時,采納這個option。
                legend: {...},
                ...
            }
        }
    ]
};

上面的例子中,baseOption、以及 media 每個 option 都是『原子 option』,即普通的含有各組件、系列定義的 option。
而由『原子option』組合成的整個 option,我們稱為『復合 option』。baseOption 是必然被使用的,此外,滿足了某個 query 條件時,對應的 option 會被使用 chart.mergeOption() 來 merge 進去。

多個 query 被滿足時的優先級:

注意,可以有多個 query 同時被滿足,會都被 mergeOption,定義在后的后被 merge(即優先級更高)。

默認 query:

如果 media 中有某項不寫 query,則表示『默認值』,即所有規則都不滿足時,采納這個option。

容器大小實時變化時的注意事項:

在不少情況下,並不需要容器DOM節點任意隨着拖拽變化大小,而是只是根據不同終端設置幾個典型尺寸。

但是如果容器DOM節點需要能任意隨着拖拽變化大小,那么目前使用時需要注意這件事:某個配置項,如果在某一個 query option中出現,那么在其他 query option 中也必須出現,否則不能夠回歸到原來的狀態。(left/right/top/bottom/width/height 不受這個限制。)

『復合 option』 中的 media 不支持 merge

也就是說,當第二(或三、四、五 ...)次 chart.setOption(rawOption) 時,如果 rawOption 是 復合option(即包含 media 列表),那么新的 rawOption.media 列表不會和老的 media 列表進行 merge,而是簡單替代。當然,rawOption.baseOption 仍然會正常和老的 option 進行merge。

其實,很少有場景需要使用『復合 option』來多次 setOption,而我們推薦的做法是,使用 mediaQuery 時,第一次setOption使用『復合 option』,后面 setOption 時僅使用 『原子 option』,也就是僅僅用 setOption 來改變 baseOption

 

以上是EChart提供的關於移動端小屏幕自適應的方法,我另外提供一種方式

通過JS識別瀏覽器信息,然后根據所得的信息,設置圖表容器的尺寸,然后再結合EChart的media query更好的展示圖表

檢測是否為移動端的JS

var ismobile = false;
    var browser = {
        versions: function () {
            var u = navigator.userAgent, app = navigator.appVersion;
            return {
                trident: u.indexOf('Trident') > -1, //IE內核
                presto: u.indexOf('Presto') > -1, //opera內核
                webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌內核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐內核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否為移動終端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android終端或者uc瀏覽器
                iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否為iPhone或者QQHD瀏覽器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web應該程序,沒有頭部與底部
            }; 
        }(), 
        language: (navigator.browserLanguage || navigator.language).toLowerCase() 
    }      
    ismobile =   browser.versions.mobile;
這段代碼能夠識別大部分的移動端設備的瀏覽器信息,對於一些特殊的瀏覽器可能會存在缺陷

根據瀏覽器尺寸,設置圖表容器的大小

if (browser.versions.mobile) {
         window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", hengshuping, false);
        $("#chartmain").height(pageheight*0.6);
        $("#chartmain").width(pagewidth * 0.95);
    }
    else {
        $("#chartmain").height("500px");
        $("#chartmain").width("700px");
    }


function hengshuping(){
    if(window.orientation==180||window.orientation==0){
        $("#chartmain").height($(window).height()-20);
        $("#chartmain").width("100%");
    }
    if(window.orientation==90||window.orientation==-90){
        $("#chartmain").height($(window).height()-20);
        $("#chartmain").width("100%");  
    }
}

結合EChart的 Media Query 設置圖表參數

function init(){
    ///折現報表實現代碼
    var myChart = echarts.init(document.getElementById('chartmain'));
    option = {
        baseOption:{
            title : {
                text: '奶牛數字化養殖報表',
                subtext: '西部電子數據采集'
            },
            tooltip : {
                trigger: 'axis'
            },
            legend: {
                data:['每日飼喂量','產奶量']
            },
            toolbox: {
                show : true,
                feature : {
                    mark : {show: true},
                    dataView : {show: true, readOnly: false},
                    magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                    restore : {show: true},
                    saveAsImage : {show: true}
                }
            },
            calculable : true,
            xAxis : [
                {
                    type : 'category',
                    boundaryGap : false,
                    data : ['周一','周二','周三','周四','周五','周六','周日']
                }
            ],
            yAxis : [
                {
                    type : 'value'
                }
            ],
            series : [
                {
                    name:'每日飼喂量',
                    type:'line',
                    smooth:true,
                    itemStyle: {normal: {areaStyle: {type: 'default'}}},
                    data:[100, 200, 150, 130, 260, 830, 710]
                },
                {
                    name:'產奶量',
                    type:'line',
                    smooth:true,
                    itemStyle: {normal: {areaStyle: {type: 'default'}}},
                    data:[30, 182, 216, 156, 390, 300, 356]
                }
            ]
        },
        media:[
            //media開始
            {
                query:{},
                option:{
                    title : {
                        text: '奶牛數字化養殖報表',
                        subtext: '西部電子數據采集'
                    },
                    tooltip : {
                        trigger: 'axis'
                    },
                    legend: {
                        data:['每日飼喂量','產奶量']
                    },
                    toolbox: {
                        show : true,
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    calculable : true,
                    xAxis : [
                        {
                            type : 'category',
                            boundaryGap : false,
                            data : ['周一','周二','周三','周四','周五','周六','周日']
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            name:'每日飼喂量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[100, 200, 150, 130, 260, 830, 710]
                        },
                        {
                            name:'產奶量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[30, 182, 216, 156, 390, 300, 356]
                        }
                    ]
                }
            },
            {
                query:{maxWidth:400,ismobile:true},
                option:{
                    title : {
                        text: '奶牛數字化養殖報表',
                        subtext: '西部電子數據采集'
                    },
                    tooltip : {
                        trigger: 'axis'
                    },
                    legend: {
                        data:['每日飼喂量','產奶量'],
                        right: 'center',
                        bottom: 0,
                        orient: 'horizontal'
                    },
                    toolbox: {
                        show : true,
                        orient:'vertical',
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    calculable : true,
                    xAxis : [
                        {
                            type : 'category',
                            boundaryGap : false,
                            data : ['周一','周二','周三','周四','周五','周六','周日']
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            name:'每日飼喂量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[100, 200, 150, 130, 260, 830, 710]
                        },
                        {
                            name:'產奶量',
                            type:'line',
                            smooth:true,
                            itemStyle: {normal: {areaStyle: {type: 'default'}}},
                            data:[30, 182, 216, 156, 390, 300, 356]
                        }
                    ]
                }
            }

            //media結束
        ]
    };
                                      
    myChart.setOption(option);
}

 效果展示

 轉載至https://www.cnblogs.com/leoxuan/p/6511123.html
 
 


免責聲明!

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



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