ECharts使用—折線圖動態加載


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

一、首先引入echarts.common.min.js文件,當然開發狀態下使用echarts.js可以更便於調試,傳送門

二、為圖表准備一個dom容器,寬高可以自行定義,

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

 

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

// 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 ,用於圖片的保存,

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

//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);

 

 

四、當然我們經常用的過程中 值是需要動態配置的,用setOption給echarts實例動態賦值:

/*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中配置的說明,自己嘗試幾下就知道對應的意思了,

 五、動態加載的時候,請求需要時間,這個過程中可以顯示loading動畫,也是有提供的,

 myChart1.showLoading();

這個方法我在聲明myChart1,初始化之后直接調用,動態配置獲得請求后,在調用

 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值,后一個系列的值會在前一個系列的值上相加。

 

 當然,這只是冰山一角,只是自己剛好需要這點而已,更多強大的功能暫時沒有用到~~~~   ^_^

 


免責聲明!

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



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