echarts系列 --- 【vue+echarts实现折线面积图、饼图、柱状图】
<template>
  <div>
      <!-- 折现面积图 -->
      <div id="barEchart" style="height:450px;width:300px"></div>
      <!-- 饼图 -->
      <div id="cirEchart" style="height:450px;width:300px"></div>
  </div>
</template>
<script>
import {getEchartApi} from "@/api/xxx" // 请求的api
export default {
    data(){
        return{
        }
    },
    methods:{
        // 请求echarts数据
        async getEchartData(){
            let params = {} // 参数
            let res = await getEchartApi(params)
            if(res && res.data && res.code === 200){
                // 调取折现面积图方法, 把请过来的折现面积图数据传走,一系列操作可以在方法内处理
                this.getBarEchart(res.data.barData)
                // 调取饼图方法
                this.getCirEchart(res.data.cirData)
            }
        },
        // 折现面积图数据
        getBarEchart(data){
            let chartDom = document.getElementById("barEchart") // 获取节点
            // 再重新获取一下,防止没有获取到节点报错
            var timer = setInterval(()=>{
                chartDom = document.getElementById("barEchart") // 获取节点
                if(!chartDom){
                    return false
                }else{
                    let myChart = echarts.init(chartDom); // echarts初始化
                    let unit = '%' // 百分单位
                    // 先处理传过来的数据,分别取出x轴 y轴的数据放在两个不同数组中 然后赋值
                    let xData = data.xxxx //x轴数据
                    let yData = data.xxxxx //y轴数据
                    let option = {
                        backgroundColor:'#f1f1f1', // 背景颜色
                        // 悬浮提示框
                        tooltip:{
                            trigger:'axis',
                            confine:true, // 将tooltip框限制再图表的区域内
                            axisPointer:{
                                type:'none', // cross表示指示线,none取消指示线
                                crossStyle:{color:'#999'} // 指示线样式
                            },
                            formatter:('{b}</br>{a}:{c}' + unit),
                        },
                        // 图例配置
                        legend:{
                            data:['数据获取率'], //多个图例可以设置动态的
                            icon:'circle', // 图例的icon
                            left: 'center',
                            bottom:10
                        },
                        // x轴配置
                        xAxis: {
                            type: 'category',
                            splitLine:{show:false},
                            boundaryGap:false,
                            // data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
                            data:xData, // x轴数据
                            // 设置x轴样式
                            triggerEvent:true,
                            axisLabel:{
                                rotate:30, // 字体倾斜
                                textStyle:{
                                    color:'#333',
                                    fontSize:14
                                },
                                // 坐标轴与刻度线对齐
                                // axisTickL:{
                                //     alignWithLabel:true
                                // }
                                // 设置x轴显示字体个数
                                // formatter:function(xData){
                                //     let newAxi
                                //     后补
                                // }
                            }
                        },
                        // y轴配置
                        yAxis: {
                            type: 'value',
                            name:'数据获取率',
                            splitLine:{show:false}, // 取消图标中的横线
                            min:0,
                            max:10, // 可以再函数外取出返回数据的最大值
                            splitNumber:5,
                            interval:(10)/splitNumber,
                            position:'left',
                            axisLine:{
                                show:true // 控制y轴显示线
                            },
                            // 设置y轴字体样式
                             axisLabel:{
                                textStyle:{
                                    color:'#333',
                                    fontSize:14
                                },
                                // 设置y轴数拼上单位
                                formatter:('{value} + unit') // y轴拼接单位
                            }
                        },
                        series: [
                            {   name:'数据获取率',
                                // data: [120, 200, 150, 80, 70, 110, 130],
                                data: yData,
                                type: 'line', // 柱状图时bar 折现图是line
                   // 设置面积阴影部分
                                areaStyle:{
                                    normal:{
                                        color:'#f47920'
                                    }
                                },
                                // yAxisIndex:1,
                                // SymbolSize:30, // 配置折现点大小
                                itemStyle:{
                                    normal:{
                                        // 配置折现点颜色
                                        color:"#f47920",
                                        // 配置折现颜色
                                        lineStyle:{
                                            color:"#f47920"
                                        }
                                    }
                                }
                            }
                        ]
                    };
                    if(option){
                        myChart.setOption(option)
                    }
                    window.addEventListener('resize',function(){
                        myChart.resize()
                    })
                   
                }
            })
           
        },
        // 饼图数据
        getCirEchart(data){
            // 先处理传来的数据,需要转化成键值对形式的 键必须有name,value
            //  比如以下方法的处理
            let newArr = data.map((item,i)=>{
                return{
                    name:item.xxxx,
                    value:item.xxxx,
                }
            })
            // 二次处理数据,获取每条数据的name,组成一个数组,展示图例
            let newArrName = []
            data.forEach(item => {
                newArrName.push(item.name)
            });
            let chartDom = document.getElementById("cirEchart") // 获取节点
            // 再重新获取一下,防止没有获取到节点报错
            var timer = setInterval(()=>{
                chartDom = document.getElementById("cirEchart") // 获取节点
                if(!chartDom){
                    return false
                }else{
                    let myChart = echarts.init(chartDom); // echarts初始化
                    let option = {
                        // backgroundColor:'#f1f1f1', // 背景颜色
                        title:{
                            top:0,
                            text:'年龄区间',
                            left:'left',
                            left:50
                        },
                        // 悬浮提示框
                        tooltip:{
                            show:true,
                            trigger:'item',
                            confine:true, // 将tooltip框限制再图表的区域内
                            axisPointer:{
                                type:'none', // cross表示指示线,none取消指示线
                                crossStyle:{color:'#999'} // 指示线样式
                            },
                            formatter:function(v){
                                let text=v.data.name;
                                let value=v.data.value;
                                return `\n${text}</br>人次: ${value}`
                            }
                        },
                        // 图例配置
                        legend:{
                            data:newArrName, //多个图例可以设置动态的
                            icon:'circle', // 图例的icon
                            left: 'center',
                            bottom:10,
                            width:20
                        },
                        avoidlabelOverlap:true,
                        series: [
                            {  
                                data: newArr,
                                type: 'pie', // 柱状图时bar 折现图是line
                                radius:"50%",
                                center:['50%','50%'],
                                label:{
                                    normal:{
                                        show:true,
                                        position:'inner',
                                        formatter:function(params){
                                            return params.data.name
                                        },
                                    }
                                },
                                emphasis:{
                                    itemStyle:{
                                        shadowBlur:10,
                                        shadowOffsetX:0,
                                        ShadowColor:'rgba(0,0,0,0.5)'
                                    }
                                },
                                itemStyle:{
                                    normal:{
                                       color:function(params){
                                           var colorList = [
                                               '#fa8f42','12bf16'
                                           ]
                                           return colorList[params.dataIndex]
                                       }
                                    }
                                }
                            }
                        ]
                    };
                    if(option){
                        myChart.setOption(option)
                    }
                    window.addEventListener('resize',function(){
                        myChart.resize()
                    })
                   
                }
            })
        }
    }
}
</script>
<style>
</style>
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号