美文网首页
使用echarts绘制图表

使用echarts绘制图表

作者: Lusia_ | 来源:发表于2017-08-13 00:39 被阅读390次

    随便聊聊~~
    最近接了新的项目需求,是有关于周报的事情,所以涉及到了各种柱状图,饼图,散点图以及地图等等。即便之前也做过图表,但是好多的配置项总是算查文档才能搞明白,所以这次趁着有机会,就在这里小小的总结一下遇到的问题吧。

    1、基本配置项

    饼图:
    var optionPhase = {
          // 标题
          title: {
              text: '上周(' + _this.bannerData.startTimeMd + '-'+ 
                        _this.bannerData.endTimeMd + ')'+ 
                        _this.industyName + '领域获投轮次分布',
           // 这里标题中加入了变量 展现形式: 上周(7.29-8.4)金融领域获投轮次分布
             x:'center'  // 标题居中显示
          },
        // 提示框
          tooltip : {
               trigger: 'item',
               formatter: "{a} <br/>{b} : {c} ({d}%)"  // 提示框内容
         },
         // 工具内容
        toolbox: { 
             show: true,
             feature: {
                 saveAsImage: {}   // 保存图片
             }
        },
         series : [
             {
                    name: '轮次',
                    type: 'pie', //  饼状图
                    radius : '55%',
                    center: ['50%', '60%'],
                    data: dataNonull,
                    itemStyle: {
                          // 移入展示样式
                          emphasis: {
                               shadowBlur: 10,
                               shadowOffsetX: 0,
                               shadowColor: 'rgba(0, 0, 0, 0.5)'
                         },
                         // 正常展示样式
                          normal:{ 
                              label:{ 
                                 show: true, 
                                  formatter: '{b} {d}%',
                                  textStyle: {
                                       color: '#000'
                                  }
                         }, 
                       // 可以自定义展示颜色
                        color: function (params) {
                                 var colorList = [
                                    '#0076D0', '#43A8E0', '#22BA6F', '#41CC5D', '#FFA300',
                                    '#F2CE00', '#FF6000', '#FF7020', '#A6A6A6', '#D9D9D9',
                                     '#c1beff', '#c2e7ff', '#fabdff' 
                                 ];
                                 return colorList[params.dataIndex]
                        },
                        labelLine :{show:true} 
                    }
                }
            ]
    };
    
    柱状图
    optionIndusty = {
         title: {
             text: '上周(7.1-7.7)国内各领域获投数量',
             x:'center'
         },
         color: ['#0076D0'],
         tooltip : {
             trigger: 'axis',
             axisPointer : {   // 坐标轴指示器,坐标轴触发有效
                 type : 'shadow'  // 默认为直线,可选为:'line' | 'shadow'
             }
         },
         xAxis : [
             {
                 type : 'category',
                 data : ['企业服务',  '电商', '消费生活', '文娱传媒', '教育', '医疗健康', '非MT', '汽车金融', '无人机', '体育'],
                 axisTick: { //坐标轴刻度相关设置
                     alignWithLabel: true
                 },
                 axisLabel:{   //坐标轴刻度标签的相关设置
                         interval:0,  
                         formatter:function(value)  
                         {  
                             return value.split("").join("\n");  
                         },
                         // rotate:-90,//倾斜度 -90 至 90 默认为0  
                         margin:10, 
                        textStyle:{  
                             color:"#000"  
                         }  
                     },
             }
         ],
         yAxis : [
             {
                 type : 'value',
                 splitLine: { // y轴分割线
                     show: false
                 }
             }
         ],
         series : [
             {
                 name:'融资数量',
                 type:'bar',
                 barWidth: 20,
                 data:[10, 33, 4, 8, 15, 25, 52, 39, 30, 20],
                 itemStyle: {
                     normal:{  // 柱状图上的数值显示
                         label:{
                             show: true,
                             position: 'top',
                             textStyle: {
                                 color: '#000'
                             }
                     }
                 }
             }
         ]
     };
    
    左右双向柱状图(大多其实都在处理数据。。。)
    var nameArr = ['百万级', '千万级', '亿元级'];
    var nameArrTemp = [];
    var valueArrMTemp = [];
    var valueArrRTemp = [];
    var valueArrM = [];
    var valueArrR = [];
    var wplValue = ''; 
    axios.get(接口地址, {params: sendData})
                    .then(function (response) {
                        var dataNonull = response.data.data; 
                        for(var i = 0; i < dataNonull.length;i++) {
                            if (dataNonull[i].name.indexOf('美元') > -1) {
                                valueArrM.push(dataNonull[i].value);
                            } else if (dataNonull[i].name.indexOf('人民币') > -1) {
                                valueArrR.push(dataNonull[i].value);
                            } else if(dataNonull[i].name.indexOf('未披露') > -1) {
                                wplValue = dataNonull[i].value;
                            }
                        }
                        valueArrM.reverse();
                        valueArrR.reverse();
                        for(var j = 0; j < nameArr.length; j++) {
                            if(valueArrM[j] == 0 && valueArrR[j] == 0) {
                            } else {
                                nameArrTemp.push(nameArr[j]);
                                valueArrMTemp.push(-valueArrM[j]);
                                valueArrRTemp.push(valueArrR[j]);
                            }
                        }
                        var amountChart = echarts.init(document.getElementById('amountChart'));
                        var optionAmount = {
                            title: {
                                text: '上周(' + _this.bannerData.startTimeMd + '-'+ _this.bannerData.endTimeMd + ')' + _this.industyName + '领域获投金额分布',
                                x:'center',
                                subtext: '未披露的融资数量:' + wplValue,
                                subtextStyle: {
                                    fontSize: '15',
                                    color: '#555'
                                }
                            },
                            legend: {
                                data:[ '美元', '人民币'],
                                bottom: 0
                            },
                            toolbox: {  // 工具内容
                                show: true,
                                feature: {
                                    saveAsImage: {}   // 保存图片
      }
                            },
                            tooltip : {
                                trigger: 'axis',
                                axisPointer : {            // 坐标轴指示器,坐标轴触发有效
                                    type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
                                },
                                formatter: function (params, ticket, callback) {
                                    var res = '融资数量' ;
                                    // var res = params[0].name ;
                                    for (var i = 0, l = params.length; i < l; i++) {
                                        res += '<br/>' + params[i].name + params[i].seriesName + ' : ' + Math.abs(params[i].value) ;     
                                    }
                                    setTimeout(function () {
                                        // 仅为了模拟异步回调
                                        callback(ticket, res);
                                    }, 500)
                                    return 'loading...';
                                }
                            },
                            grid: {
                                left: '3%',
                                right: '4%',
                                bottom: '10%', // 图表距离
                                containLabel: true
                            },
                            xAxis: {
                                show: true,
                                type: 'value',
                                axisTick: { //坐标轴刻度相关设置
                                    show: false
                                },
                                axisLabel : { 
                                    formatter: function (value){return Math.abs(value);} //坐标轴显示的数值都取绝对值
                                } 
                            },
                            yAxis: {
                                type: 'category',
                                axisTick: { //坐标轴刻度相关设置
                                    show: false
                                },
                                data: nameArrTemp                        
                            },
                            series: [
                                {
                                    name: '美元',
                                    type: 'bar',
                                    barWidth: 15,
                                    stack: '总量',
                                    itemStyle: {
                                        normal:{ 
                                            label:{ 
                                                show: true,
                                                position: 'left',
                                                textStyle: {
                                                    color: '#000'
                                                },
                                                formatter:function(v){return Math.abs(v.data)}
                                            }
                                        }
                                    },
                                    data: valueArrMTemp                           
                                },
                                {
                                    name: '人民币',
                                    type: 'bar',
                                    barWidth: 15,
                                    stack: '总量', // 数据堆叠,同类目轴上系列配置相同的stack值可以堆叠放置
                                    itemStyle: {
                                        normal:{ 
                                            label:{ 
                                                show: true,
                                                position: 'right',
                                                textStyle: {
                                                    color: '#000'
                                                }
                                            },
                                        }
                                    },
                                    data: valueArrRTemp    
                                 }
                            ]
                        };
                        window.onresize = amountChart.resize;
                        amountChart.setOption(optionAmount);
                    })                       
    

    图表如下:

    image.png

    2、常用/遇到过的问题

    1、提示框组件
    tooltip : {
         trigger: 'axis', // 'item'数据项图形触发,散点图,饼图等无类目轴的图表中使用。'axis'坐标轴触发,柱状图,折线图等会使用类目轴的图表中使用。
         axisPointer : {            // 坐标轴指示器,坐标轴触发有效
              type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
         }
    },
    
    trigger: 'item',
    formatter: "{a} <br/>{b} : {c} ({d}%)"
    
    2、图例组件
    legend: {
        data: ['上上周',  '上周'],
       orient: 'vertical',  // 垂直显示 ,默认水平
        bottom: 0  // 显示再底部  left:'left' 显示在左上部
    }
    
    3、工具
    toolbox: {  // 工具内容
      show: true,
      orient: 'vertical', // 垂直
      left: 'right',  // 右部
      top: 'center'  // 上下居中
      feature: {
         dataView: { readOnly: false},
         restore: {},
         saveAsImage: {}   // 保存图片
      }
    }
    
    4、坐标轴横坐标标签垂直显示
                      xAxis : [
                                {
                                    type : 'category',
                                    data :  nameArr,
                                    axisTick: { //坐标轴刻度相关设置
                                        show: false
                                    }, 
                                    axisLabel:{   //坐标轴刻度标签的相关设置
                                        interval:0,  
                                        formatter:function(value)  
                                        {  
                                           return value.split("").join("\n");  
                                        },
                                        // rotate:-90,//倾斜度 -90 至 90 默认为0  
                                        margin:10,  
                                        textStyle:{  
                                            color:"#000"  
                                        }  
                                    }, 
                                }
                            ],
    
    5、图表边距
                           grid: {
                               left: '3%',
                               right: '4%',
                               bottom: '10%', // 图表距离
                               containLabel: true
                           },
    

    相关文章

      网友评论

          本文标题:使用echarts绘制图表

          本文链接:https://www.haomeiwen.com/subject/kyrsrxtx.html