8种基于ECharts改进的数据可视化,让你逆袭职场

简介: 8种基于ECharts改进的数据可视化,让你逆袭职场

一、纵坐标分组


image.png


1.1 options设置


option = {
   grid: {
       left: 250
    },
    xAxis: {
       axisLine: {
           lineStyle: {color: '#ccc'}
        },
       axisLabel: {
           textStyle: {color: '#777'}
        }
    },
    yAxis: [{
       inverse: true,
       splitLine: {
           show: true
        },
       axisTick: {
           length: 100,
           lineStyle: {color: '#ccc'}          
        },
       axisLine: {
           lineStyle: {color: '#ccc'}
        },
        data: ['-', '-', '-', '-', '-']      
    }, {
       name: '                     所属行业',
       nameLocation: 'start',      
       nameTextStyle: {
           fontWeight: 'bold'
        },
     position: 'left',
       offset: 130,
       axisLine: {
           onZero: false,
           show: false          
        },
       axisTick: {
           length: 70,
           inside: true,
           lineStyle: {color: '#ccc'}
        },      
       axisLabel: {
           inside: true
        },      
       inverse: true,      
       data: ['电商', '游戏', '金融', '旅游', '直播']
    }, {
       name: '                产品名',
       nameLocation: 'start',
       nameTextStyle: {
           fontWeight: 'bold'
        },      
 position: 'left',
       offset: 220,
       axisLine: {
           onZero: false,
           show: false
        },
       axisTick: {
           length: 100,
           inside: true,
           lineStyle: {color: '#ccc'}          
        },
       axisLabel: {
           inside: true
        },
       inverse: true,
       data: ['APP数据分析', 'DMP', '企业版', '移动广告鉴别', '']      
    }],
    series: [{
        type: 'bar',
        data:[220, 182, 191, 234, 290],
        label: {
          normal: {
               show: true,
               position: 'left',
               textStyle: {color: '#000'},
               formatter: '合同金额',              
            }
        }
    }, {
        type: 'bar',
        data:[210, 132, 91, 204, 220],
        label: {
          normal: {
               show: true,
               position: 'left',
               textStyle: {color: '#000'},
               formatter: '已收款',              
            }
        }      
    }, {
        type: 'bar',
        data:[120, 132, 131, 254, 278],
        label: {
          normal: {
               show: true,
               position: 'left',
               textStyle: {color: '#000'},
               formatter: '应收款',              
            }
        }      
    }, {      
        type: 'bar',
        data:['-', '-', '-', '-', '-'],
       yAxisIndex: 1
    }, {
        type: 'bar',
        data:['-', '-', '-', '-', '-'],
       yAxisIndex: 2
    }]
};


二、动态分组



image.png

2.1 options设置


  var siteThreeMonthYield = [
      {"ThreeMonthYield":[{"yield": 0.9 , "agraderate": 0.8},{"yield": 0.87 , "agraderate": 0.5},{"yield": 0.98 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.93 , "agraderate": 0.68},{"yield": 0.78 , "agraderate": 0.55},{"yield": 0.998 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.98 , "agraderate": 0.65},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.78 , "agraderate": 0.45},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.68 , "agraderate": 0.46},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.79 , "agraderate": 0.56},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.60 , "agraderate": 0.28},{"yield": 0.873 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.54 , "agraderate": 0.28},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.47 , "agraderate": 0.28},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.69 , "agraderate": 0.28},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.89 , "agraderate": 0.28},{"yield": 0.87 , "agraderate": 0.5}]},
      {"ThreeMonthYield":[{"yield": 0.8 , "agraderate": 0.68},{"yield": 0.76 , "agraderate": 0.28},{"yield": 0.87 , "agraderate": 0.5}]}
      ];
  var sitenames = ['安徽','北京','广东','定远','甘肃','山东','新疆','乌鲁木齐','深圳','西藏','贵州','湖南'];
  var threeMonth = ['201809','201810','201811'];
  var grids = [];
  var xAxes = [];
  var yAxes = [];
  var series = [];
  var titles = [];
  var datas =[];
  var aGradeRates=[];
  var count = 0;
  var zh_month = new Array(3);
  var sitesnum = sitenames.length;
  for(var i=0; i<3; i++){
    var strmon = threeMonth[i].substring(4,6);
    var month = parseInt(threeMonth[i].substring(4));
    switch(month)
    {
      case 1: zh_month[i] = '一月';break;
      case 2: zh_month[i] = '二月';break;
      case 3: zh_month[i] = '三月';break;
      case 4: zh_month[i] = '四月';break;
      case 5: zh_month[i] = '五月';break;
      case 6: zh_month[i] = '六月';break;
      case 7: zh_month[i] = '七月';break;
      case 8: zh_month[i] = '八月';break;
      case 9: zh_month[i] = '九月';break;
      case 10: zh_month[i] = '十月';break;
      case 11: zh_month[i] = '十一月';break;
      case 12: zh_month[i] = '十二月';break;
      default: break;
    }
  }
  for(var i = 0; i < sitesnum; i++) {
    siteThreeMonthYield[i].ThreeMonthYield
      var data = new Array(3);
      var aGradeRate = new Array(3);
      for(var j=0 ; j < 3; j++){
        data[j]=siteThreeMonthYield[i].ThreeMonthYield[j].yield*100;
        aGradeRate[j]=siteThreeMonthYield[i].ThreeMonthYield[j].agraderate*100;
      }
      if(i===0){
          grids.push({
              left:'4%',
              show: true,
              borderWidth: 0,
              backgroundColor: '#fff',
              shadowColor: 'rgba(0, 0, 0, 0.3)',
              shadowBlur: 1,
              height:'70%',
              top:'20%',
              width: (1/sitesnum*(100-4))+'%',
              //右边距right的位置:左边100先减去第一个左移的4%,再减去宽度 (1/sitesnum*(100-4))+'%'
              right: ((100-4)-(1/sitesnum*(100-4)))+'%' 
          });
      }else{
          grids.push({
              left:((4)+(i)/sitesnum*(100-4))+'%',//除去第一个左边距的4%,剩余渐分都以96%进行分割
              show: true,
              borderWidth: 0,
                  backgroundColor: '#fff',
                  shadowColor: 'rgba(0, 0, 0, 0.3)',
                  shadowBlur: 1,
                  height:'70%',
                  top:'20%',
                  Width: (1/sitesnum*(100-4))+'%',
                //右边距right的位置:左边100%先减去第一个左移的4%,再减去96%为起始的该grid的左边距(i/sitesnum*(100-4)),再减去宽度 (1/sitesnum*(100-4))+'%'
                  right:((100-4)-(i/sitesnum*(100-4))-(1/sitesnum*(100-4)))+'%'
              });
      }
      titles.push({
        text:'根据区域的数量自动调整宽度'
            ,left:'0%'
            ,top:'6%'
      });
      var titleoffset = 1.5;//针对不同的现地因名字长度不一样,显示的位置会有些许差别,默认是两个字符如'B1'
      if(sitenames[i].length==2) titleoffset=1.5;//两个字符
      if(sitenames[i].length==3) titleoffset=2;//三个字符
      if(sitenames[i].length==4) titleoffset=3;//四个字符
      if(i==0){
           titles.push({
              text:sitenames[i],
              left:(i/sitesnum*(100-4)+4)+(1/sitesnum*(100-4)/2-titleoffset)+'%',
              top:'94%'
          });
      }else{
          titles.push({
              text:sitenames[i],
              left:(i/sitesnum*(100-4)+4)+(1/sitesnum*(100-4)/2-titleoffset)+'%',
              top:'94%'
          });
      }
      xAxes.push({
          gridIndex:i,
              type : 'category',
              data : zh_month,
              axisTick: {
                  alignWithLabel: false
              },
              textStyle: {
                  fontSize: 20,
                  color: 'red'
              },
              axisLabel:{
                  show:true,
                  interval:0
              }
      });
      if(i==0){
          yAxes.push({
              gridIndex:i,
              type : 'value',
              interval:20,
              max:120,
              min:0,
              axisTick:{
                  inside:true
              },
              axisLabel:{
                  show:true
              },
              name : '百分比 (%)',
            axisLabel : {
                    formatter: '{value} '
                },
            position: 'left'
          });
      }else{
          yAxes.push({
              gridIndex:i,
              type : 'value',
              interval:20,
              max:120,
              min:0,
              axisTick:{//坐标轴刻度线
                  show:false
              },
              axisLine:{
                  show:false
              },
              axisLabel:{
                  show:false
              }
          });
      }
      series.push({
          xAxisIndex: i,
          yAxisIndex: i,
          name:'良率',
          type:'line',
          //barWidth: '60%',
          data:data
      });
      series.push({
          xAxisIndex: i,
          yAxisIndex: i,
          name:'A级率',
          type:'line',
          //barWidth: '60%',
          data:aGradeRate
      });
  }
option = {
      title:titles,
      tooltip : {
          trigger: 'axis',
          axisPointer : {            // 坐标轴指示器,坐标轴触发有效
              type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
          }
      },
      legend: {
          data : ['良率','A级率'],
          top:'10%'
      },
      toolbox: {
          top: '10%',
          show: true,
          feature: {
              dataZoom: {
                  yAxisIndex: 'none'
              },
              dataView: {readOnly: false},
              magicType: {type: ['line','bar']},
              restore: {title:'Refresh'},
              saveAsImage: {title:'Save'}
          }
      },
      grid : grids,
      xAxis : xAxes,
      yAxis : yAxes,
      series : series
};


三、柱状图叠加合并



image.png


3.1 options设置


option = {
    tooltip : {
        trigger: 'axis',
        axisPointer : {            // 坐标轴指示器,坐标轴触发有效
            type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
        }
    },
    legend: {
        data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎','百度','谷歌']
    },
    grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
    },
    xAxis : [
        {
            type : 'category',
            data : ['周一','周二','周三','周四','周五','周六','周日']
        }
    ],
    yAxis : [
        {
            type : 'value'
        }
    ],
    series : [
        {
            name:'直接访问',
            type:'bar',
            data:[320, 332, 301, 334, 390, 330, 320]
        },
        {
            name:'邮件营销',
            type:'bar',
            stack: '广告',
            data:[120, 132, 101, 134, 90, 230, 210]
        },
        {
            name:'联盟广告',
            type:'bar',
            stack: '广告',
            data:[220, 182, 191, 234, 290, 330, 310]
        },
        {
            name:'视频广告',
            type:'bar',
            stack: '广告',
            data:[150, 232, 201, 154, 190, 330, 410]
        },
        {
            name:'搜索引擎',
            type:'bar',
            data:[862, 1018, 964, 1026, 1679, 1600, 1570],
            markLine : {
                lineStyle: {
                    normal: {
                        type: 'dashed'
                    }
                },
                data : [
                    [{type : 'min'}, {type : 'max'}]
                ]
            }
        },
        {
            name:'百度',
            type:'bar',
            barWidth : 5,
            stack: '搜索引擎',
            data:[620, 732, 701, 734, 1090, 1130, 1120]
        },
        {
            name:'谷歌',
            type:'bar',
            stack: '搜索引擎',
            data:[120, 132, 101, 134, 290, 230, 220]
        },
        {
            name:'必应',
            type:'bar',
            stack: '搜索引擎',
            data:[60, 72, 71, 74, 190, 130, 110]
        },
        {
            name:'其他',
            type:'bar',
            stack: '搜索引擎',
            data:[62, 82, 91, 84, 109, 110, 120]
        }
    ]
  };


四、阶梯线图


image.png


4.1 options设置


option = {
  xAxis: {
    type: 'category',
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: 'Step Start',
      type: 'line',
      step: 'start',
      data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
      name: 'Step Middle',
      type: 'line',
      step: 'middle',
      data: [220, 282, 201, 234, 290, 430, 410]
    },
    {
      name: 'Step End',
      type: 'line',
      step: 'end',
      data: [450, 432, 401, 454, 590, 530, 510]
    }
  ]
};


五、阶梯瀑布图



image.png



5.1 说明


Apache ECharts 中并没有单独的瀑布图类型,但是我们可以使用堆叠的柱状图模拟该效果。
假设数据数组中的值是表示对前一个值的增减:
var data = [900, 345, 393, -108, -154, 135, 178, 286, -119, -361, -203];
也就是第一个数据是 900,第二个数据 345 表示的是在 900 的基础上增加了 345……
将这个数据展示为阶梯瀑布图时,
我们可以使用三个系列:
第一个是不可交互的透明系列,用来实现“悬空”的柱状图效果;
第二个系列用来表示正数;第三个系列用来表示负数。


5.2 option


var data = [900, 345, 393, -108, -154, 135, 178, 286, -119, -361, -203];
var help = [];
var positive = [];
var negative = [];
for (var i = 0, sum = 0; i < data.length; ++i) {
  if (data[i] >= 0) {
    positive.push(data[i]);
    negative.push('-');
  } else {
    positive.push('-');
    negative.push(-data[i]);
  }
  if (i === 0) {
    help.push(0);
  } else {
    sum += data[i - 1];
    if (data[i] < 0) {
      help.push(sum + data[i]);
    } else {
      help.push(sum);
    }
  }
}
option = {
  title: {
    text: 'Waterfall'
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: {
    type: 'category',
    splitLine: { show: false },
    data: (function() {
      var list = [];
      for (var i = 1; i <= 11; i++) {
        list.push('Oct/' + i);
      }
      return list;
    })()
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      type: 'bar',
      stack: 'all',
      itemStyle: {
        normal: {
          barBorderColor: 'rgba(0,0,0,0)',
          color: 'rgba(0,0,0,0)'
        },
        emphasis: {
          barBorderColor: 'rgba(0,0,0,0)',
          color: 'rgba(0,0,0,0)'
        }
      },
      data: help
    },
    {
      name: 'positive',
      type: 'bar',
      stack: 'all',
      data: positive
    },
    {
      name: 'negative',
      type: 'bar',
      stack: 'all',
      data: negative,
      itemStyle: {
        color: '#f33'
      }
    }
  ]
};


六、数据集( dataset )



image.png



6.1 说明


有了数据表之后,使用者可以灵活地配置:数据如何对应到轴和图形系列。
用户可以使用 seriesLayoutBy 配置项,改变图表对于行列的理解。seriesLayoutBy 可取值:
'column': 默认值。系列被安放到 dataset 的列上面。
'row': 系列被安放到 dataset 的行上面。


6.2 option


option = {
  legend: {},
  tooltip: {},
  dataset: {
    source: [
      ['product', '2012', '2013', '2014', '2015'],
      ['Matcha Latte', 41.1, 30.4, 65.1, 53.3],
      ['Milk Tea', 86.5, 92.1, 85.7, 83.1],
      ['Cheese Cocoa', 24.1, 67.2, 79.5, 86.4]
    ]
  },
  xAxis: [
    { type: 'category', gridIndex: 0 },
    { type: 'category', gridIndex: 1 }
  ],
  yAxis: [{ gridIndex: 0 }, { gridIndex: 1 }],
  grid: [{ bottom: '55%' }, { top: '55%' }],
  series: [
    // 这几个系列会出现在第一个直角坐标系中,每个系列对应到 dataset 的每一行。
    { type: 'bar', seriesLayoutBy: 'row' },
    { type: 'bar', seriesLayoutBy: 'row' },
    { type: 'bar', seriesLayoutBy: 'row' },
    // 这几个系列会出现在第二个直角坐标系中,每个系列对应到 dataset 的每一列。
    { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
    { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
    { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 },
    { type: 'bar', xAxisIndex: 1, yAxisIndex: 1 }
  ]
};



七、双向柱子



image.png


7.1 option


  var myData = ['一审服判息诉率', '撤诉率', '调解率', '实际执行率', '裁判自动履行率', '执行标的到位率', '再审审查率']
    var lineData = [100, 100, 100, 100, 100, 100, 100]
    var lastYearData = {
        1: [3, 20, 62, 34, 55, 65, 33]
    }
    var thisYearData = {
        1: [11, 38, 23, 39, 66, 66, 79]
    }
    var timeLineData = [1]
    var background = "#0e2147"; //背景 
    var option = {
        baseOption: {
            backgroundColor: background,
            timeline: {
                show: false,
                top: 0,
                data: []
            },
            legend : {
                top : '5%',
                left : '31%',
                itemWidth : 22,
                itemHeight : 22,
                itemGap: 343,
                icon : 'horizontal',
                textStyle : {
                    color : '#ffffff',
                    fontSize : 20,
                },
                data: ['2017', '2018']
            },
            grid: [{
                show: false,
                left: '5%',
                top: '10%',
                bottom: '8%',
                containLabel: true,
                width: '37%'
            }, {
                show: false,
                left: '51%',
                top: '10%',
                bottom: '8%',
                width: '0%'
            }, {
                show: false,
                right: '2%',
                top: '10%',
                bottom: '8%',
                containLabel: true,
                width: '37%'
            }],
            xAxis: [{
                type: 'value',
                inverse: true,
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                position: 'top',
                axisLabel: {
                    show: false
                },
                splitLine: {
                    show: false
                }
            }, {
                gridIndex: 1,
                show: false
            }, {
                gridIndex: 2,
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                position: 'top',
                axisLabel: {
                    show: false
                },
                splitLine: {
                    show: false
                }
            }],
            yAxis: [{
                type: 'category',
                inverse: true,
                position: 'right',
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                axisLabel: {
                    show: false
                },
                data: myData
            }, {
                gridIndex: 1,
                type: 'category',
                inverse: true,
                position: 'left',
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                axisLabel: {
                    show: true,
                    textStyle: {
                        color: '#ffffff',
                        fontSize: 20
                    }
                },
                data: myData.map(function(value) {
                    return {
                        value: value,
                        textStyle: {
                            align: 'center'
                        }
                    }
                })
            }, {
                gridIndex: 2,
                type: 'category',
                inverse: true,
                position: 'left',
                axisLine: {
                    show: false
                },
                axisTick: {
                    show: false
                },
                axisLabel: {
                    show: false
                },
                data: myData
            }],
            series: []
        },
        options: []
    }
    option.baseOption.timeline.data.push(timeLineData[0])
    option.options.push({
        series: [
        {
            type: 'pictorialBar',
            xAxisIndex: 0,
            yAxisIndex: 0,
            symbol: 'rect',
            itemStyle: {
                normal: {
                    color: 'rgba(3,147,114,0.27)'
                }
            },
            barWidth: 10,
            symbolRepeat: true,
            symbolSize: 14,
            data: lineData,
            barGap: '-100%',
            barCategoryGap: 0,
            label: {
                normal: {
                    show: true,
                    formatter: (series) => {
                        return lastYearData[timeLineData[0]][series.dataIndex] + '%'
                    },
                    position: 'insideTopLeft',
                    textStyle:{
                        color: '#ffffff',
                        fontSize: 20,
                    },
                    offset: [0, -35],
                }
            },
            z: -100,
                animationEasing: 'elasticOut',
                 animationDelay: function (dataIndex, params) {
                return params.index * 30;
            }
        }, {
            name: '2017',
            type: 'pictorialBar',
            xAxisIndex: 0,
            yAxisIndex: 0,
            symbol: 'rect',
            barWidth: 10,
            itemStyle: {
                normal: {
                    barBorderRadius: 5,
                    color: '#039372'
                }
            },
            symbolRepeat: true,
            symbolSize: 14,
            data: lastYearData[timeLineData[0]],
            animationEasing: 'elasticOut',
            animationDelay: function (dataIndex, params) {
                return params.index * 30 * 1.1;
            }
        },
        {
            type: 'pictorialBar',
            xAxisIndex: 2,
            yAxisIndex: 2,
            symbol: 'rect',
            itemStyle: {
                normal: {
                    color: 'rgba(54,215,182,0.27)'
                }
            },
            barWidth: 10,
            symbolRepeat: true,
            symbolSize: 14,
            data: lineData,
            barGap: '-100%',
            barCategoryGap: 0,
            label: {
                normal: {
                    show: true,
                    formatter: (series) => {
                        return thisYearData[timeLineData[0]][series.dataIndex] + '%'
                    },
                    position: 'insideTopRight',
                    textStyle:{
                        color: '#ffffff',
                        fontSize: 20,
                    },
                    offset: [0, -35],
                }
            },
            z: -100,
                animationEasing: 'elasticOut',
                 animationDelay: function (dataIndex, params) {
                return params.index * 30;
            }
        }, {
            name: '2018',
            type: 'pictorialBar',
            xAxisIndex: 2,
            yAxisIndex: 2,
            symbol: 'rect',
            barWidth: 10,
            itemStyle: {
                normal: {
                    barBorderRadius: 5,
                    color: '#36d7b6'
                }
            },
            symbolRepeat: true,
            symbolSize: 14,
            data: thisYearData[timeLineData[0]],
            animationEasing: 'elasticOut',
            animationDelay: function (dataIndex, params) {
                return params.index * 30 * 1.1;
            }
        }
        ]
    });


八、时间轴



image.png


8.1 option


var data = [];
var dataCount = 10;
var startTime = +new Date();
var categories = ['categoryA', 'categoryB', 'categoryC'];
var types = [
  { name: 'JS Heap', color: '#7b9ce1' },
  { name: 'Documents', color: '#bd6d6c' },
  { name: 'Nodes', color: '#75d874' },
  { name: 'Listeners', color: '#e0bc78' },
  { name: 'GPU Memory', color: '#dc77dc' },
  { name: 'GPU', color: '#72b362' }
];
// Generate mock data
categories.forEach(function (category, index) {
  var baseTime = startTime;
  for (var i = 0; i < dataCount; i++) {
    var typeItem = types[Math.round(Math.random() * (types.length - 1))];
    var duration = Math.round(Math.random() * 10000);
    data.push({
      name: typeItem.name,
      value: [index, baseTime, (baseTime += duration), duration],
      itemStyle: {
        normal: {
          color: typeItem.color
        }
      }
    });
    baseTime += Math.round(Math.random() * 2000);
  }
});
function renderItem(params, api) {
  var categoryIndex = api.value(0);
  var start = api.coord([api.value(1), categoryIndex]);
  var end = api.coord([api.value(2), categoryIndex]);
  var height = api.size([0, 1])[1] * 0.6;
  var rectShape = echarts.graphic.clipRectByRect(
    {
      x: start[0],
      y: start[1] - height / 2,
      width: end[0] - start[0],
      height: height
    },
    {
      x: params.coordSys.x,
      y: params.coordSys.y,
      width: params.coordSys.width,
      height: params.coordSys.height
    }
  );
  return (
    rectShape && {
      type: 'rect',
      transition: ['shape'],
      shape: rectShape,
      style: api.style()
    }
  );
}
option = {
  tooltip: {
    formatter: function (params) {
      return params.marker + params.name + ': ' + params.value[3] + ' ms';
    }
  },
  title: {
    text: 'Profile',
    left: 'center'
  },
  dataZoom: [
    {
      type: 'slider',
      filterMode: 'weakFilter',
      showDataShadow: false,
      top: 400,
      labelFormatter: ''
    },
    {
      type: 'inside',
      filterMode: 'weakFilter'
    }
  ],
  grid: {
    height: 300
  },
  xAxis: {
    min: startTime,
    scale: true,
    axisLabel: {
      formatter: function (val) {
        return Math.max(0, val - startTime) + ' ms';
      }
    }
  },
  yAxis: {
    data: categories
  },
  series: [
    {
      type: 'custom',
      renderItem: renderItem,
      itemStyle: {
        opacity: 0.8
      },
      encode: {
        x: [1, 2],
        y: 0
      },
      data: data
    }
  ]
};
目录
相关文章
|
7月前
|
数据可视化 JavaScript 前端开发
基于Echarts构建停车场数据可视化大屏
基于Echarts构建停车场数据可视化大屏
218 0
|
4月前
|
数据可视化
为什么Echarts数据可视化大屏不好做?
为什么Echarts数据可视化大屏不好做?
|
4月前
|
数据可视化 JavaScript
【Echarts大屏】数据可视化大屏展示页(附原码一键复制)
【Echarts大屏】数据可视化大屏展示页(附原码一键复制)
|
4月前
|
数据可视化 前端开发 JavaScript
【Echarts大屏】数据可视化大屏展示页(附原码一键复制)
【Echarts大屏】数据可视化大屏展示页(附原码一键复制)
|
4月前
|
数据可视化
动漫形象平台 Echarts数据可视化大屏
动漫形象平台 Echarts数据可视化大屏
|
4月前
|
数据可视化
为什么不建议你拿下Echarts数据可视化?
为什么不建议你拿下Echarts数据可视化?
|
4月前
|
数据可视化
Echarts数据可视化开发| 移动效能平台附源码
Echarts数据可视化开发| 移动效能平台附源码
|
4月前
|
数据可视化
为什么不建议大家冲一冲Echarts数据可视化,不要太香了
为什么不建议大家冲一冲Echarts数据可视化,不要太香了
|
4月前
|
数据可视化 前端开发 大数据
Echarts数据可视化大屏展示页(附源码一键搞定)
Echarts数据可视化大屏展示页(附源码一键搞定)
|
4月前
|
数据可视化
Echarts数据可视化开发| 智慧数据平台
Echarts数据可视化开发| 智慧数据平台