echarts 应用小结(热力图,关联图)

最近在学echarts,本身试着作了一些,不少地方还搞不太懂,写记录一下,慢慢来吧html

先看效果数组

这是普通的折线图浏览器

这是热力图echarts

这是双Y轴图dom

这是饼图和柱图联动函数

好了,很少说,上代码spa

<body>
    <div id="accelerator">
        <div id="ac" style="width: 100%; height: 620px;"></div>
        <!-- ac 表示 AcceleratorChart -->
    </div>
    <div id="economicDriving" class="clearfix">
        <div id="edc1" style="width: 70%; height: 620px;"></div>
        <div id="edc2" style="width: 30%; height: 620px;"></div>
        <!-- edc表示 EconomicDrivingChart -->
    </div>
    <div id="addSpeed">
        <div id="asc" style="width: 100%; height: 620px;"></div>
        <!-- asc 表示 addSpeedChart -->
    </div>
    <div id="stall">
        <div id="sc" style="width: 100%; height: 620px;"></div>
        <!-- sc 表示 stallChart -->
    </div>
    <div id="weight" class="clearfix">
        <div id="wc1" style="width: 60%; height: 620px;"></div>
        <div id="wc2" style="width: 40%; height: 620px;"></div>
        <!-- wc 表示 weightChart -->
    </div>
</body>

这里须要注意一个问题,有的时候你们为起什么名字的id发愁,可是千万不要把元素的id与js的函数名同样,由于浏览器会把id默认提高为变量(好比谷歌)rest

<script>
    initAcceleratorChart();
    initEconomicDrivingChart();
    initAddSpeedChart();
    stallChart();
    weightChart();
    
    function initAcceleratorChart (){
        var chart = echarts.init(document.getElementById('ac'),'macarons');
        var data = randomXData();
        var option = {
            tooltip: {
                trigger: 'axis',
                formatter: function (param){
                    var s = '油门开度:'+param[0].name+'%';
                    s += '<br/>';
                    s += '时长:';
                    s += param[0].value;
                    return s;
                    
                },
                textStyle: {
                    align: 'left'
                },
                axisPointer: {
                    type: 'cross'
                }
            },
            xAxis: [
                {
                    type: 'category',
                    boundaryGap: false, // 两端空白
                    name: '油门开度(%)',
                    data: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    name: '时长(h)'
                }
            ],
            series: [
                {
                    name: '时长',
                    type: 'line',
                    smooth: true,
                    itemStyle: {
                        normal: {
                            areaStyle: {
                                type: 'default'
                            }
                        }
                    },
                    data: data
                }
            ]
        }
        chart.setOption(option);
        chart.on('click', function (param){
            console.log(param)
        })
    }
    
    function initEconomicDrivingChart(){
        var xData = [1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, '>3400'];
        var yData = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
        // 随机数a b
        function random (a, b){
            return Math.round(Math.random()*Math.abs(b-a)+Math.min(a,b));
        }
        // seriesData 格式: [{name:'',type:'heatmap',data:[[x,y,z],[],[],...},{...}]
        // data 是个二位数组 x 对应x坐标  y对应y坐标 z对应映射值  yData的长度等于seriseData的长度
        var seriesData = [];
        // 模拟数据
        for(var i = 0; i < yData.length; i++){
            var data = [];
            for(var j = 0; j < xData.length; j ++){
                data.push([i,j]);
            }
            seriesData.push(data);
        }
        for(var m = 0; m < seriesData.length; m ++){
            seriesData[m] = seriesData[m].map(function(item){
                return [item[1], item[0], random(1, 10)];
            })
            seriesData[m] = {
                name: yData[m],
                type: 'heatmap',
                data: seriesData[m]
            }
        }
        var option = {
            title: {
                text: '数据分析'
            },
            tooltip : {
                trigger: 'item'
                /*axisPointer: {
                    type: 'cross'
                }*/
            },
            legend: {
                show: true,
                z: 999,
                left: 'center',
                top: 'top',
                orient: 'horizontal'
            },
            xAxis: {
                name: '转速',
                type: 'category',
                data: xData
            },
            yAxis: {
                name: '%',
                type: 'category',
                data: yData
            },
            visualMap: {
                show: true,
                type: 'piecewise',  // 分段型
                min: 1,
                max: 10,
                pieces: [       // 数据分段 对应颜色
                    {gte: 8},
                    {gte: 4, lte: 7},
                    {lte: 3}
                ],
                calculable: true,
                orient: 'vertical',
                left: 'left',
                bottom: '15%'
            },
            series: seriesData,
            label: {        // 颜色块里的文本样式
                normal: {
                    show: true,
                    color: '#000',
                    fontSize: 16
                },
                emphasis: {
                    fontWeight: 'bolder'
                }
            },
            itemStyle: {    // 颜色块的样式
                normal: {
                    borderWidth: 1,
                    borderColor: '#fff'
                },
                emphasis: {
                    shadowBlur: 10,
                    shadowColor: 'rgba(0,0,0,0.5)'
                }
            }        
        };
        var chart1 = echarts.init(document.getElementById('edc1'), 'macarons');
        chart1.setOption(option);

        var v1 = 0;
        var v2 = 0;
        var v3 = 0;
        seriesData.forEach(function(item){
            var data = item.data;
            data.forEach(function(i){
                var v = parseInt(i[2]);
                if(v <= 3){     // 次经济
                    v1 += v;
                }else if (v > 3 && v < 8){  // 经济
                    v2 += v;
                }else{      // 非经济
                    v3 += v;
                }
            }) 
        })
        var option2 = {
           
            tooltip: {
                trigger: 'item',
                formatter: '{b}:{c}({d}%)'
            },
            legend: {
                orient: 'horizontal',
                left: 'center',
                bottom: 40,
                data: ['非经济行驶', '经济行驶', '次经济行驶']
            },
            series: [
                {
                    type: 'pie',
                    radius: '50%',
                    center: ['50%', '50%'],
                    data: [
                        {value: v3, name: '非经济行驶'},
                        {value: v2, name: '经济行驶'},
                        {value: v1, name: '次经济行驶'}
                    ],
                    itemStyle: {
                        normal: {
                            label: {
                                show: false
                            }
                        }
                    }
                }
            ]
        }
        var chart2 = echarts.init(document.getElementById('edc2'), 'macarons');
        chart2.setOption(option2);         
    }
    
    function initAddSpeedChart(){
        var option = {
            title: {
                text: '车辆加速度分析'
            },
            tooltip: {

            },
            xAxis: [{
                type: 'category',
                name: 'xxx',
                data: [-3, -2, -1, 0, 1, 2, 3]
            }],
            yAxis: [{
                type: 'value',
                name: '转速'
            }],
            visualMap: {
                show: true,
                type: 'piecewise',  // 分段型
               
                pieces: [       // 数据分段 对应颜色
                    {gte: 2000},    // 正常
                    {gt: 1000, lt: 2000},   // 过激
                    {lte: 1000}     // 异常
                ],
                calculable: true,
                orient: 'vertical',
                left: 'left',
                bottom: '15%'
            },
            series: [{
                name: '加速分析',
                type: 'bar',
                data: [800, 1300, 4000, 6500, 5100, 1500, 790]
            }]
        }
        var chart = echarts.init(document.getElementById('asc'), 'macarons');
        chart.setOption(option)
    }
  
    function stallChart(){
        var option = {
            title : {
                text: '档位分析',
                subtext: '纯属虚构'
            },
            tooltip : {
                trigger: 'item'
            },
            legend: {
                data:['里程', '时间']
            },
            toolbox: {
                show : true,
                feature : {
                    mark : {show: true},
                    dataView : {show: true, readOnly: false},
                    magicType : {show: true, type: ['line', 'bar']},
                    restore : {show: true},
                    saveAsImage : {show: true}
                }
            },
            calculable : true,
            xAxis : [
                {
                    type : 'category',
                    data : ['R','N','1档','2档','3档','4档','5档']
                }
            ],
            yAxis : [
                {
                    type : 'value',
                    name: '里程(千米)'
                },
                {
                    type: 'value',
                    name: '时间(分钟)'
                }
            ],
            series : [
                {
                    name:'里程',
                    type:'bar',
                    yAxisIndex:0,
                    data:[25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4],
                    markPoint : {
                        data : [
                            {type : 'max', name: '最大值'},
                            {type : 'min', name: '最小值'}
                        ]
                    }
                },
                {
                    name:'时间',
                    type:'bar',
                    yAxisIndex: 1,
                    data:[9.0, 26.4, 70.7, 175.6, 182.2, 48.7, 18.8],
                    markPoint : {
                        data : [
                            {name : '年最高', value : 182.2, xAxis: 7, yAxis: 183, symbolSize:18},
                            {name : '年最低', value : 2.3, xAxis: 11, yAxis: 3}
                        ]
                    },
                    markLine : {
                        data : [
                            {type : 'average', name : '平均值'}
                        ]
                    }
                }
            ]
        };
                            
        var chart = echarts.init(document.getElementById('sc'), 'macarons');
        chart.setOption(option);
    }
   
    function weightChart(){
        var option1 = {
            title: {
                text: '载重分析'
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {       // 修改大小位置
                orient: 'horizontal',
                x: 'right',
                y: 'bottom',
                itemWidth: 40,
                itemHeight: 15,
                data: ['满载', '半载', '空载']
            },
            calculable: true,
            series: [
                {
                    name: '载重分析',
                    type: 'pie',
                    radius: '55%',
                    center: ['50%', '50%'],
                    data: [
                        {value: 225, name: '满载'},
                        {value: 167, name: '半载'},
                        {value: 189, name: '空载'}
                    ]
                }
            ]

        };
        var option2 = {
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow'
                }
            },
            legend: {
                show: false,
                orient: 'vertical',
                x: 'right',
                data: ['满载', '半载', '空载']
            },
            calculable: true,
            xAxis: [
                {
                    type: 'category', 
                    show: true, 
                    data: ['满载', '半载', '空载']
                }
            ],
            yAxis: [
                {
                    type: 'value', 
                    splitArea: {show: true}
                }
            ],
            series: [
                {
                    name: '满载',
                    type: 'bar',
                    data: [225, null, null]   // itemStyle
                },
                {
                    name: '半载',
                    type: 'bar',
                    data: [null, 167, null]
                },
                {
                    name: '空载',
                    type: 'bar',
                    data: [null, null, 189]
                }
            ]
        }
        var chart1 = echarts.init(document.getElementById('wc1'), 'macarons');
        var chart2 = echarts.init(document.getElementById('wc2'), 'macarons');
        chart1.setOption(option1);
        chart2.setOption(option2);
        echarts.connect([chart1, chart2]);
    }
   
    function randomXData (){
        var range = 4;
        
        //var n = (Math.Random(range*rand)).toFixed(1);
        var n = 0;
        var arr = [];
        for(var i = 0; i < 21; i ++){
            n = (range*Math.random()).toFixed(1);
            arr.push(n);
        }
        return arr;
    }
</script>

还有就是由于业务须要,最后的联动图,有些数据设置为0了,致使柱图略细code

这个demo应用了本身的主题,你们颜色可能会和个人不同orm

tooltip我没有去设置,提示信息不太友好,能够用formatter设置一下

最后一组两图关联时,注意series.data 里数据的name必定要一致

相关文章
相关标签/搜索