ECharts使用—折線圖動態加載

最近需求中用到折線圖,單線條,多線交錯,以前是散點圖,用的是另外一個 amcharts.js,這個文檔也能找的到,迴歸早本次重點:EChartshtml

1、首先引入echarts.common.min.js文件,固然開發狀態下使用echarts.js能夠更便於調試,傳送門ajax

2、爲圖表準備一個dom容器,寬高能夠自行定義,json

<body>
    <!-- 爲 ECharts 準備一個具有大小(寬高)的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
</body>

 

3、使用 echarts.init 方法初始化一個echart是實例,並經過setOption方法生成一個簡單的折線圖,以下:canvas

// 1 單獨一個 
var myChart = echarts.init(document.getElementById('main'));

// 指定圖表的配置項和數據
var option = {
    tooltip: { //跟隨鼠標顯示數值
        trigger: 'axis'
    },
    //保存圖片
    toolbox: {
        feature: {
            saveAsImage: {
                name:'熱度監控', //圖片名
                pixelRatio:2
            }
        }
    },
    /* grid: {   //canvas距離邊界位置
        left: '3%',
        bottom:'25%'
    },*/
    // 聲明一個 X 軸,類目軸(category)。默認狀況下,類目軸對應到 dataset 第一列。
    xAxis: {
        type: 'category',
        boundaryGap: false,//座標軸不留白
        data: dataX.slice(0,10),
        axisLabel: { //x座標展現偏移
            interval:0,
            rotate:60
        },
        /* axisLabel: { //刻度偏移
            interval: 0,
            rotate:0,
            fontWeight:'400',
            formatter:function(value)
            {
                return value.split("").join("\n");
            }
        },
        axisTick:{  //隔幾個空格顯示刻度
            interval:1,
        }*/
    },

    // 聲明一個 Y 軸,數值軸。
    yAxis: {
        type: 'value'
    },
    // 聲明多個 bar 系列,默認狀況下,每一個系列會自動對應到 dataset 的每一列。
    series: [{
        data: [820, 932, 901, 934, 932, 901, 934],
        type: 'line'
    }]
};
// 使用剛指定的配置項和數據顯示圖表。
myChart.setOption(option);

其中部分屬性都附上了註釋,實際中會經常使用的是 saveAsImage ,用於圖片的保存,api

3、對於多個折線,跟上面的方法大同小異,區別於聲明圖例組件legend和系列列表賦值,demo以下:echarts

//2 多個折線 

/*2*/
var myChart3 = echarts.init(document.getElementById('main3'));
var option3 = {
    tooltip: {
        trigger: 'axis'
    },
    legend: {
        data:['總池','用戶池','馬甲池']
    },
    toolbox: {
        feature: {
            saveAsImage: {
                name:'獎池監控',
                pixelRatio:2
            }
        }
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: dataX2,
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            name:'總池',
            type:'line',
            stack: '總量',
            data:[120, 132, 101, 134, 90, 230, 210]
        },
        {
            name:'用戶池',
            type:'line',
            stack: '總量',
            data:[220, 182, 191, 234, 290, 330, 310]
        },
        {
            name:'馬甲池',
            type:'line',
            stack: '總量',
            data:[150, 232, 201, 154, 190, 330, 410]
        }
    ]
};
myChart3.setOption(option3);

 

 

4、固然咱們常常用的過程當中 值是須要動態配置的,用setOption給echarts實例動態賦值:dom

/*1先聲明*/
var myChart1 = echarts.init(document.getElementById('main'));

myChart1.setOption({
    legend: {
        data:['銷量']
    },
    tooltip: {
        trigger: 'axis'
    }, 
    toolbox: {
        feature: {
            saveAsImage: {
                name:'熱度監控', 
                pixelRatio:2
            }
        }
    },
    xAxis: {
        type: 'category',
        boundaryGap: false,
        data: []
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        name: '銷量',
        type: 'line',
        data: []
    }]
});
// 2異步加載數據
$.get('/admin/js/data1.json').done(function (data) {    
    // 填入數據
    myChart1.setOption({
        xAxis: {
            type: 'category',
            boundaryGap: false,    
            data: data.dataX2
        },
        series: [{
            name: '銷量',
            data: data.data1
        }]
    });
    
});

具體參數就不在解釋,能夠參考API中配置的說明,本身嘗試幾下就知道對應的意思了,異步

 5、動態加載的時候,請求須要時間,這個過程當中能夠顯示loading動畫,也是有提供的,async

 myChart1.showLoading();

這個方法我在聲明myChart1,初始化以後直接調用,動態配置得到請求後,在調用ide

 myChart1.hideLoading();

隱藏動畫,舉個栗子吧:

$.ajax({
    type: "get",
    url: 'demo.json',
    async: true,
    dataType: 'json',
    success: function(res) {
        if(res.status == 1 && res.data){
            var data = res.data;
            myChart3.setOption({
                xAxis: {
                    type: 'category',
                    boundaryGap: false,
                    data: data.dataX1
                },
                series: [{
                    name:'總池',
                    type:'line',
                    stack: '總量',
                    data:data.dataY1
                }]
            });
        }else if(!data){
            messager('danger','暫無數據')
        }else{
            messager('danger',res.msg)
        }
    },
    error: function(error) {
        messager('danger',error.statusText)
    },
    complete:function () {
        myChart3.hideLoading();
    }

});

叨逼叨:這裏series裏有參數項stack,多個線條時有用,若是設置相同的stack值,後一個系列的值會在前一個系列的值上相加。

 

 固然,這只是冰山一角,只是本身恰好須要這點而已,更多強大的功能暫時沒有用到~~~~   ^_^

相關文章
相關標籤/搜索