echarts progress bar style chart

sample graph

Insert image description here

code

<!--
*@flat-bar-chart
*@author yuge
*@date 2023/6/26 16:21
-->
<template>
  <div class="flat-bar-chart-main" ref="chartDiv"></div>
</template>

<script>
import * as echarts from 'echarts'

export default {
    
    
  name: "FlatBarChart",
  props: {
    
    
    //显示数据
    showData: {
    
    
      type: Object, default: () => ({
    
    
        dataList: [30, 20, 50],
        itemNameList: ['高风险', '中风险', '低风险'],
        colorList: ['#ff000090', '#ffb80090', '#1089E790',],
      })
    },
  },
  watch: {
    
    
    showData: {
    
    
      handler(v) {
    
    
        this.initChart(v)
      },
      deep: true,
    }
  },
  components: {
    
    },
  data() {
    
    
    return {
    
    
      mChart: null
    }
  },
  mounted() {
    
    
    try {
    
    
      this.mChart = echarts.init(this.$refs.chartDiv)
    } catch (e) {
    
    
    }
    this.initChart(this.showData)
  },
  methods: {
    
    
    initChart(chartData) {
    
    
      // const dataList = [30,20,50]
      // const border = [100,100,100]
      // const itemNameList = ['高风险','中风险','低风险']
      // const colorList = ['#ff0000','#ffb800',  '#1089E7',];
      console.log(chartData)

      const data = [50, 20, 30]
      const barWidth = 15

      const colorList = [];
      colorList[2] = new echarts.graphic.LinearGradient(
        0, 0, 1, 0,
        [
          {
    
    offset: 0, color: '#0275f250'},
          {
    
    offset: 1, color: '#0275f2'}
        ]
      )
      colorList[1] = new echarts.graphic.LinearGradient(
        0, 0, 1, 0,
        [
          {
    
    offset: 0, color: '#f5cf0050'},
          {
    
    offset: 1, color: '#f5cf00'}
        ]
      )
      colorList[0] = new echarts.graphic.LinearGradient(
        0, 0, 1, 0,
        [
          {
    
    offset: 0, color: '#ff000050'},
          {
    
    offset: 1, color: '#ff0000'}
        ]
      )
      const option = {
    
    
        grid: {
    
    
          top: '4%',
          left: '70',
          right: '50',
          bottom: '3%',
          containLabel: true
        },
        xAxis: {
    
    
          type: 'value',
          splitLine: {
    
    
            show: false,
          },
          offset: 10,
          axisTick: {
    
    
            show: false,
          },
          axisLine: {
    
    
            show: false,
          },
          axisLabel: {
    
    
            show: false,
          },
        },
        yAxis: {
    
    
          type: 'category',
          offset: '60',
          axisLine: {
    
    
            show: false,
          },
          axisTick: {
    
    
            show: false,
          },
          axisLabel: {
    
    
            inside: true,
            align: 'left',
            fontSize: 14,
            color: '#fff',
            // verticalAlign: 'top'
          },
          data: ['高风险', '中风险', '低风险']
        },
        series: [
          {
    
    
            name: '2011年',
            type: 'bar',
            // type: 'pictorialBar',
            barWidth,
            // symbol: 'rect',
            // symbolRepeat: 'fixed',
            // symbolMargin: '40%',
            // symbolClip: true,
            // symbolOffset: [5, 0],
            // stack: '12',
            // symbolSize: [4, 15],
            // symbolBoundingData: 100,
            itemStyle: {
    
    
              normal: {
    
    
                color(params) {
    
    
                  // build a color map as your need.
                  // var colorList = [
                  //   '#25defd','#ebc701','#00ddc2'
                  // ];
                  return colorList[params.dataIndex]
                },
                barBorderRadius: [20, 20, 20, 20],
              }
            },
            label: {
    
    
              show: false,
              position: 'right',
              offset: [5, 0],
              fontSize: 16,
              color: '#fff',
              formatter: '{c}'
            },
            z: 9999,
            data: data
          },
          {
    
    
            name: '2011年',
            type: 'bar',
            // type: 'pictorialBar',
            barWidth: barWidth,
            padding:[2,0],
            // symbolOffset: [16, 6],
            // animationDuration: 0,
            // symbolRepeat: 'fixed',
            // symbolMargin: '40%',
            // symbol: 'rect',
            // symbolSize: [4, 20],
            // symbolBoundingData: 100,
            barGap: '-100%',
            z: 99,
            itemStyle: {
    
    
              normal: {
    
    
                color: 'rgba(3,15,59,0.38)'
              }
            },
            label: {
    
    
              show: true,
              position: 'right',
              // distance: 20,
              offset: [5, 0],
              fontSize: 16,
              color: '#fff',
              formatter(params){
    
    
                return data[params.dataIndex]
              }
            },
            data: [100, 100, 100]
          },
          {
    
    
            // 分隔
            type: 'pictorialBar',
            itemStyle: {
    
    
              normal: {
    
    
                color: '#100c29',
              },
              barBorderRadius: [20, 20, 20, 20],
            },
            symbolRepeat: 'fixed',
            symbolMargin: 5,
            symbol: 'rect',
            symbolClip: true,
            symbolSize: [4, barWidth],
            symbolPosition: 'start',
            symbolOffset: [-4, 0],
            // symbolBoundingData: this.total,
            data,
            width: barWidth,
            z: 0,
            zlevel: 1,
          },
        ]
      };

      this.mChart.setOption(option)
    }
  },
  destroyed() {
    
    
  }
}
</script>

<style scoped lang="scss">
.flat-bar-chart-main {
    
    
  height: 100%;
  width: 100%;
}
</style>



Guess you like

Origin blog.csdn.net/TY_GYY/article/details/131569174