效果展示:
上圖中每隔兩秒鍾動態加載一次數據,詳細設置代碼如下:
1 <script type="text/javascript"> 2 var dom = document.getElementById("container"); 3 var myChart = echarts.init(dom); 4 option = { 5 title: { 6 text: '動態數據', 7 subtext: '純屬虛構' 8 }, 9 tooltip: { 10 trigger: 'axis', 11 axisPointer: { 12 type: 'cross', 13 label: { 14 backgroundColor: '#283b56' 15 } 16 } 17 }, 18 legend: { 19 data: ['最新成交價', '預購隊列'] 20 }, 21 toolbox: { 22 show: true, 23 feature: { 24 dataView: { readOnly: false }, 25 restore: {}, 26 saveAsImage: {} 27 } 28 }, 29 dataZoom: { 30 show: false, 31 start: 0, 32 end: 100 33 }, 34 xAxis: [ 35 { 36 type: 'category', 37 boundaryGap: true, 38 data: (function () { 39 var now = new Date(); 40 var res = []; 41 var len = 10; 42 while (len--) { 43 res.unshift(now.toLocaleTimeString().replace(/^\D*/, '')); 44 now = new Date(now - 2000); 45 } 46 return res; 47 })() 48 }, 49 { 50 type: 'category', 51 boundaryGap: true, 52 data: (function () { 53 var res = []; 54 var len = 10; 55 while (len--) { 56 res.push(10 - len - 1); 57 } 58 return res; 59 })() 60 } 61 ], 62 yAxis: [ 63 { 64 type: 'value', 65 scale: true, 66 name: '價格', 67 max: 30, 68 min: 0, 69 boundaryGap: [0.2, 0.2] 70 }, 71 { 72 type: 'value', 73 scale: true, 74 name: '預購量', 75 max: 1200, 76 min: 0, 77 boundaryGap: [0.2, 0.2] 78 } 79 ], 80 series: [ 81 { 82 name: '預購隊列', 83 type: 'bar', 84 xAxisIndex: 1, 85 yAxisIndex: 1, 86 data: (function () { 87 var res = []; 88 var len = 10; 89 while (len--) { 90 res.push(Math.round(Math.random() * 1000)); 91 } 92 return res; 93 })() 94 }, 95 { 96 name: '最新成交價', 97 type: 'line', 98 data: (function () { 99 var res = []; 100 var len = 0; 101 while (len < 10) { 102 res.push((Math.random() * 10 + 5).toFixed(1) - 0); 103 len++; 104 } 105 return res; 106 })() 107 } 108 ] 109 }; 110 111 var count = 11; 112 setInterval(function () { 113 var axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, ''); 114 115 var data0 = option.series[0].data; 116 var data1 = option.series[1].data; 117 data0.shift(); 118 data0.push(Math.round(Math.random() * 1000)); 119 data1.shift(); 120 data1.push((Math.random() * 10 + 5).toFixed(1) - 0); 121 122 option.xAxis[0].data.shift(); 123 option.xAxis[0].data.push(axisData); 124 option.xAxis[1].data.shift(); 125 option.xAxis[1].data.push(count++); 126 127 myChart.setOption(option); 128 }, 2100); 129 130 131 </script>
使用 setInterval(function () { show() }, 2100); 函數定時兩秒鍾執行一次show()方法,x軸數據由 var axisData = (new Date()).toLocaleTimeString().replace(/^\D*/, '');獲取到最新的時間
var data0 = option.series[0].data; var data1 = option.series[1].data;
這兩行代碼獲取取到現在圖表中的所有數值,用data0.shift();刪除掉數組中第一個元素,使用data0.push(Math.round(Math.random() * 1000));向數組末尾添加一個隨機的數值
兩組數據以相同的方式刪除第一條數據再向末尾添加一條數據
上下兩個X軸的數據也是以相同的方式刪除第一條末尾添加一條的方式處理數據
最后用myChart.setOption(option);加載數據。
整體思路還是比較簡單的,至於圖標的各個屬性設置可以查看:https://www.cnblogs.com/xiong950413/p/13322440.html
Echart更多圖標請查閱:https://echarts.apache.org/examples/zh/editor.html?c=dynamic-data