1. 程式人生 > 實用技巧 >echarts繪製波形圖

echarts繪製波形圖

一、echarts配置項如下:

var option = {
                animation: true,
                title: {},
                tooltip: {
                    showDelay: 0,
                },
                xAxis: {
                    type: 'value',
                },
                grid: {
                    top: '20%',
                    bottom: '20%'
                },
                yAxis: {
                    min: -90,
                    max: 90,
                },
                series: [{
                    name: '',
                    type: 'line',
                    showSymbol: false,
                    clip: true,
                    markLine: {
                        symbol: ['none', 'none'],
                        label: { show: true },
                    },
                    data: [],
                }]
            };

二、效果示例:

三、一些問題:

雖然series的type是line,但我data裡的值是和scatter一樣的散點值。資料庫中的原始資料有波形點數wp(這裡是128)和波形陣列wa(這裡長度為1024),我們需要換成點值陣列[ ...,[1/128*i,wa[i]],...]。

                
                decimal[][] dcw = new decimal[1024][];
                for (int i = 0; i < 1024; i++)
                {
                    dcw[i] 
= new decimal[2] { 1/wp * i, wa[i] }; }

x軸的刻度是自動生成的,有時候顯示很蛋疼。這裡x軸座標顯示成0-8的整數看起來非常理想,但我也不知道為什麼會顯示成這樣。y軸的刻度是自動的,有時候並不會等分,強行等分官方文件裡說是不推薦的?設定splitNumber和interval可以保證等分間隔。·

                yAxis: {
                    min: -90,
                    max: 90,
                    splitNumber: 6,
                    interval: 30
                
}

四、簡單示例原始碼

百度網盤連結: https://pan.baidu.com/s/14688L45HXF3Up41dHDwUig 提取碼: mfth

檔案訪問跨域問題,通過npm安裝live-server,在專案所在的資料夾下執行live-server

為了看效果可以直接將data.json中的座標陣列複製貼上到html中。

<!DOCTYPEhtml> <htmllang="en">
<head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>Document</title> <scriptsrc="js/jquery-3.3.1.js"></script> <scriptsrc="js/echarts.js"></script> <style> .justify-content-around{ -ms-flex-pack:distribute!important; justify-content:space-around!important; }
.flex-column{ -ms-flex-direction:column!important; flex-direction:column!important; }
.flex-wave{ display:flex; justify-content:center; align-items:center; height:400px; width:40%; border:1pxsolid#D3C0FA; min-width:440px; max-width:600px; }
.waveform{ border:1pxsolid; border-color:burlywood; height:190px; width:100%; }
.waveform-c{ height:100%; width:100%; } </style> </head>
<body> <divclass="flex-columnflex-wavejustify-content-around"> <divclass="waveform"> <divclass="waveform-c"id="wavechartx">x波形</div> </div> <divclass="waveform"> <divclass="waveform-c"id="wavecharty">y波形</div> </div> <script> varwavechart1=echarts.init(document.getElementById('wavechartx')); varwavechart2=echarts.init(document.getElementById('wavecharty')); varoption={ animation:true, title:{}, tooltip:{ showDelay:0, }, xAxis:{ type:'value', }, grid:{ top:'20%', bottom:'20%' }, yAxis:{ min:-90, max:90, }, series:[{ name:'', type:'line', showSymbol:false, clip:true, markLine:{ symbol:['none','none'], label:{show:true}, }, data:[], }] }; option.title.text="X波形"; wavechart1.setOption(option); option.title.text="Y波形"; wavechart2.setOption(option); setTimeout(function(){ window.onresize=function(){ wavechart1.resize(); wavechart2.resize(); } },200)
//賦值data資料 $.ajax({ url:"data.json", dataType:"json", cache:false, success:function(result){ option.title.text="X波形"; option.series[0].data=result.wavedata1; wavechart1.setOption(option); option.series[0].data=result.wavedata2; option.title.text="Y波形"; wavechart2.setOption(option); } }); </script> </div> </body>
</html>