1. 程式人生 > >ECharts圖——addData屬性實現動態實時更新資料

ECharts圖——addData屬性實現動態實時更新資料

此為網上的demo做了修改,記錄以便日後學習。

注:addData是在ECharts2中提出的,在ECharts3移除了addData方法,可以考慮用push的方法把資料從尾部新增放進去,然後用shift移除首部第一個資料,任然可以達到更新的效果。在ECharts3中也參考appendData方法。

(1)一般寫法(可以直接執行看效果):

<div id="main" style="height:400px"></div>
<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
<script type="text/javascript">
    require.config({
        paths: {
            echarts: 'http://echarts.baidu.com/build/dist'
        }
    });
    // 使用
    require
    (
            [
                'echarts',
                'echarts/chart/line' ,
                '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:['1', '2']
                    },
                    toolbox: {
                        show : true,
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            magicType : {show: true, type: ['line', 'bar']},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    dataZoom : {
                        show : false,
                        start : 0,
                        end : 100
                    },
                    xAxis : [
                        {
                            type : 'category',
                            boundaryGap : true,
                            data : (function (){
                                var now = new Date();
                                var res = [];
                                var len = 4;
                                while (len--) {
                                    res.unshift(now.toLocaleTimeString().replace(/^\D*/,''));
                                    now = new Date(now - 2000);
                                }
                                return res;
                            })()
                        },
                        {
                            type : 'category',
                            boundaryGap : true,
                            data : (function (){
                                var res = [];
                                var len = 200;
                                while (len--) {
                                    res.push(len + 1);
                                }
                                return res;
                            })()
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value',
                        },
                        {
                            type : 'value',
                        }
                    ],
                    series : [
                        {
                            name:'aaa',
                            type:'bar',
                            xAxisIndex: 1,
                            yAxisIndex: 1,
                            data:(function (){
                                var res = [];
                                var len = 200;
                                while (len--) {
                                    res.push(Math.round(Math.random() * 1000));
                                }
                                return res;
                            })()
                        },
                    ]
                };;
                myChart.setOption(option);
                var timeTicket;
                clearInterval(timeTicket);
                timeTicket = setInterval(function (){
                    // 動態資料介面 addData
                    myChart.addData([
                        [
                            0,        // 系列索引
                            {
                                value:Math.round(Math.random() * 1000), // 新增資料
                            },
                            true,     // 新增資料是否從佇列頭部插入
                            false     // 是否增加佇列長度,false則自定刪除原有資料,隊頭插入刪隊尾,隊尾插入刪隊頭
                        ],
                    ]);
                }, 2100);

            }
    );
</script>

(2)在我寫的VUE中替換ECharts2的addData的方法可以參考以下寫法(我們假設將資料控制在200條以內):

if( arr.length == 200 ){ arr.shift(); } arr.push('data')