象形图+叠积图+markPoint

描述:当前是关于Echarts图表中的 示例。
 
            const barData = {
  xaxis: ['2015', '2016', '2017', '2018', '2019'],
  series: [
    {
      data: [10, 10, 20, 20, 20],
    },
    {
      data: [438, 483.3, 532, 603.55, 740.2],
    },
  ],
  legend: ['第三产业', 'GDP总值'],
  unit: '亿元',
  legendShow: true,
  colorArr: [
    {
      start: '#0076FF',
      end: 'rgba(40,203,252,0.00)',
    },
    {
      start: 'rgba(124,225,255,0.8)',
      end: 'rgba(40,203,252,0)',
    },
  ],
  xLabelWidth: 135,
  xLabelheight: 48,
  xLabelBg:
    'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAADCAYAAAAp+adOAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAOaADAAQAAAABAAAAAwAAAABcACqHAAAAKElEQVQoFWOc/ez/fwYoSJViZISxkcVhYoOdxuV+psHucGq4b0R4EgAU2guFUrWCeQAAAABJRU5ErkJggg==',
  grid: {
    left: '100px',
    top: '96px',
    right: '70px',
    bottom: '65px',
    containLabel: false,
  },
  namePadding: [0, 10, 10, 0],
};
let normalColor = 'rgba(236,248,255,0.70)';
let gdpData = [];
let barBg = [];
let seriesData = barData.series.map((item, index) => {
  if (index % 2 === 1) {
    barBg.push({
      type: 'pictorialBar',
      itemStyle: {
        normal: {
          opacity: 0.6,
        },
      },
      barGap: '-74%',
      symbolRepeat: 'fixed', //使图形元素重复
      symbolSize: [45, 3],
      symbolMargin: 1,
      symbol: `image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAADCAYAAAAHvIbcAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAALaADAAQAAAABAAAAAwAAAAA4WZQ1AAAAIUlEQVQoFWPkcA77zwAFP/auYoSxB7M4E8yRQ4keko4GAN3cHaadNxSoAAAAAElFTkSuQmCC`,
      data: barData.series[0] && barData.series[0].data,
    });
    gdpData[index] =
      barData.series[index] &&
      barData.series[index].data.map((item2, index2) => {
        return Math.abs(item2 - barData.series[index - 1].data[index2]);
      });
  }
  let markPoint = item.data.map((item, index) => {
    return {
      coord: [index, item],
      symbolSize: [57, 3],
      symbolOffset: [0, -5],
      symbol:
        'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAADCAYAAAAp+adOAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAOaADAAQAAAABAAAAAwAAAABcACqHAAAAKElEQVQoFWOc/ez/fwYoSJViZISxkcVhYoOdxuV+psHucGq4b0R4EgAU2guFUrWCeQAAAABJRU5ErkJggg==',
    };
  });
  return {
    name: barData.legend[index],
    type: 'bar',
    stack: barData.stack ? barData.stack[index] : 'bar',
    data: index % 2 === 1 ? gdpData[index] : item.data,
    barGap: '45%',
    barWidth: '45px',
    itemStyle: {
      normal: {
        color: {
          type: 'linear',
          x: 0,
          y: 0,
          x2: 0,
          y2: 1,
          colorStops: [
            {
              offset: 0,
              color: barData.colorArr[index].start,
            },
            {
              offset: 1,
              color: barData.colorArr[index].end,
            },
          ],
          globalCoord: false,
        },
      },
    },
    markPoint: {
      data: markPoint,
    },
  };
});
seriesData = [...seriesData, ...barBg];
option = {
  backgroundColor: '#0A2E5D',
  legend: {
    show: barData.legendShow,
    x: 'right',
    y: 'top',
    selectedMode: false,
    icon: 'rect',
    padding: [20, 0, 0, 0],
    itemGap: 32,
    itemWidth: 26,
    itemHeight: 18,
    textStyle: {
      color: normalColor,
      fontSize: 36,
      fontFamily: 'PingFangSC-Regular',
    },
    textStyle: {
      height: 30,
      rich: {
        a: {
          color: normalColor,
          fontSize: 36,
          fontFamily: 'PingFangSC-Regular',
        },
      },
    },
    formatter: (name) => {
      return '{a|' + name + ' ' + '}';
    },
    data: barData.legend,
  },
  grid: barData.grid,
  tooltip: {
    textStyle: {
      fontSize: 48,
    },
    trigger: 'axis',
    formatter: function (params) {
      let str = '';
      for (let i = 0; i < params.length - 1; i++) {
        if ((!!params[i].value || params[i].value === 0) && params[i].seriesName !== '') {
          let value;
          if (i === params.length - 2) {
            value = params[i].value + params[0].value;
          } else [(value = params[i].value)];
          str += params[i].seriesName + ': ' + value + barData.unit + '<br/>';
        } else if (params[i].seriesName !== '') {
          str += params[i].seriesName + ': ' + '无数据' + '<br/>';
        }
      }
      return str;
    },
  },
  xAxis: [
    {
      type: 'category',
      data: barData.xaxis,
      axisPointer: {
        type: 'shadow',
      },
      axisLabel: {
        interval: 0,
        margin: 15,
        formatter: (value) => {
          return `{a|${value}}`;
        },
        width: barData.xLabelWidth,
        height: barData.xLabelheight,
        align: 'center',
        backgroundColor: {
          image: barData.xLabelBg,
        },
        rich: {
          a: {
            fontFamily: 'DINAlternate-Bold',
            color: normalColor,
            fontSize: 36,
            lineHeight: 54,
          },
        },
      },
      axisLine: {
        show: false,
      },
      axisTick: {
        show: false,
      },
      splitLine: {
        show: false,
      },
    },
  ],
  yAxis: [
    {
      type: 'value',
      name: '',
      splitNumber: 3,
      nameTextStyle: {
        fontFamily: 'PingFangSC-Regular',
        color: normalColor,
        fontSize: 36,
        align: 'right',
        padding: barData.namePadding,
      },
      axisLabel: {
        showMinLabel: false,
        formatter: '{value}',
        align: 'right',
        textStyle: {
          fontFamily: 'PingFangSC-Regular',
          color: normalColor,
          fontSize: 36,
        },
      },
      axisLine: {
        show: false,
      },
      axisTick: {
        show: false,
      },
      splitLine: {
        show: barData.splitLineHide ? false : true,
        lineStyle: {
          type: 'dashed',
          width: 3,
          color: '#093D5D',
        },
      },
    },
  ],
  series: seriesData,
};