echarts渲染异形柱状图实例

echarts yekong

数据可视化大屏 项目开发中,设计图中有一个效果比较特殊,用echarts代码实现的话,可能没办法实现这种效果,于是想到用图片的方式来实现。

设计图效果截图

设计图效果截图

echarts渲染后的效果

柱状图分为三部分,顶部中间以及底部三部分。

echarts渲染异形柱状图实例

实例代码

drawLine() {
  var that = this
  window.addEventListener('resize', this.drawLine)
  let myChart = echarts.init(this.$refs.echarts)
  var barWidth = 25
  var option = {
    textStyle: {
      color: '#c0c3cd',
      fontSize: 14,
    },
    legend: {
      show: true,
      top: 10,
      right: 0,
      itemWidth: 22,
      itemHeight: 22,
      icon: 'circle',
      padding: 0,
      data: [
        {
          name: '喷漆',
          icon: 'image://' + icon1 // 喷漆的自定义图标
        },
        {
          name: '涉氨制冷',
          icon: 'image://' + icon2 // 涉氨制冷的自定义图标
        }
      ],
      textStyle: {
        color: 'rgba(193, 215, 230, 1)',
        fontSize: 14,
        padding: [2, 0, 0, 0],
      },
    },
    color: ['#00D7E9', 'rgba(0, 215, 233, 0.9)'],
    grid: {
      containLabel: true,
      left: 10,
      right: 10,
      bottom: 10,
      top: 60,
    },
    xAxis: {
      nameTextStyle: {
        color: '#c0c3cd',
        padding: [0, 0, -10, 0],
        fontSize: 12,
      },
      axisLabel: {
        color: 'rgba(193, 215, 230, 1)',
        fontSize: 14,
        interval: 0,
        lineHeight: 20,
      },
      axisTick: {
        show: false,
        lineStyle: {
          color: '#384267',
          width: 1,
        },
      },
      splitLine: {
        show: false,
      },
      axisLine: {
        lineStyle: {
          color: 'rgba(40, 144, 236, 1)',
        },
        show: true,
      },
      data: this.list.map(obj => obj.name),
      type: 'category',
    },
    yAxis: {
      minInterval: 10,
      axisLabel: {
        color: 'rgba(193, 215, 230, 1)',
        fontSize: 14,
        interval: 0,
        fontFamily: 'DIN_Bold'
      },
      axisTick: {
        lineStyle: {
          color: '#668092',
          width: 0,
        },
        show: true,
      },
      splitLine: {
        show: false,
        lineStyle: {
          color: '#335971',
          "type": "dashed"
        },
      },
      axisLine: {
        lineStyle: {
          color: 'rgba(8, 46, 124, 1.00)',
          width: 1,
          type: "dashed"
        },
        show: false,
      }
    },
    // 调整柱子间距
    barGap: '0%', // 柱子之间的间距
    series: [
      {
        name: '喷漆',
        type: 'pictorialBar',
        symbol: 'image://' + bg,
        symbolSize: [barWidth, '100%'],
        data: this.list.map(obj => obj.value),
        barWidth: barWidth,
        symbolOffset: [-20, -6],
        label: {
          show: true, // 显示标签
          position: 'top', // 标签位置在顶部
          color: 'rgba(32, 169, 245, 1)', // 标签文字颜色
          fontSize: 14, // 标签文字大小
          formatter: '{c}', // 标签内容,{c} 会被替换为数据值
          offset: [-20, -10] // 向左偏移 20 个单位
        }
      },
      {
        name: '喷漆1', // 底部
        type: 'pictorialBar',
        symbol: 'image://' + bgBottom,
        symbolSize: [barWidth, 6],
        data: this.list.map(obj => obj.value), // 设置固定高度
        barWidth: barWidth,
        symbolOffset: [-20, 0]
      },
      {
        name: '喷漆2', // 顶部
        type: 'pictorialBar',
        symbolPosition: 'end',
        symbol: 'image://' + bgTop,
        symbolSize: [barWidth, 10],
        symbolOffset: [-20, -14],
        data: this.list.map(obj => obj.value), // 设置顶部位置
        barWidth: barWidth,
      },
      {
        name: '涉氨制冷',
        type: 'pictorialBar',
        barCategoryGap: '40%', // 类别之间的间距
        symbol: 'image://' + bg2,
        symbolSize: [barWidth, '100%'],
        data: this.list.map(obj => obj.value2), // 减去底部的高度
        barWidth: barWidth,
        symbolOffset: [20, -6],
        label: {
          show: true, // 显示标签
          position: 'top', // 标签位置在顶部
          color: 'rgba(255, 131, 31, 1)', // 标签文字颜色
          fontSize: 14, // 标签文字大小
          formatter: '{c}', // 标签内容,{c} 会被替换为数据值
          offset: [20, -10] // 向左偏移 20 个单位
        }
      },
      {
        name: '涉氨制冷1', // 底部
        type: 'pictorialBar',
        symbol: 'image://' + bg2Bottom,
        symbolSize: [barWidth, 6],
        data: this.list.map(obj => obj.value2), // 设置固定高度
        barWidth: barWidth,
        symbolOffset: [20, 0]
      },
      {
        name: '涉氨制冷2', // 顶部
        type: 'pictorialBar',
        symbolPosition: 'end',
        symbol: 'image://' + bg2Top,
        symbolSize: [barWidth, 10],
        symbolOffset: [20, -14],
        data: this.list.map(obj => obj.value2), // 设置顶部位置
        barWidth: barWidth,
      },
    ],
    tooltip: {
      show: true,
      trigger: 'axis',
      formatter: '{b}:{c0}',
    },
  };
  myChart.clear()
  myChart.resize()
  myChart.setOption(option)
},
喜欢
echarts渲染异形柱状图实例