首页 前端知识 echarts柱状图值为0时不显示以及柱状图百分比展示

echarts柱状图值为0时不显示以及柱状图百分比展示

2024-03-05 09:03:32 前端知识 前端哥 403 46 我要收藏

echarts柱状图值为0时不显示以及柱状图百分比展示

1.效果展示

在这里插入图片描述

2.代码

<template>
  <div id="container">
      <div id="main"></div>
  </div>
</template>
<script>

import * as echarts from 'echarts'
import * as lodash from 'lodash'
 export default {
  name: 'MainView',
  data () {
    return {
      option: {
        title: {
          // text: '通气时间',
          left: '3%',
          top: '1%',
          textStyle: {
            fontSize: 12
          }
        },
        legend: {
          show: false,
          top: '3%',
          right: '1%'
        },
        grid: {
          show: true,
          left: '0%',
          top: '20%',
          right: '2%',
          bottom: '25%'
          // backgroundColor: '#f0f9ff',
          // borderColor: 'rgba(204, 204, 204, 0.03)'
        },
        tooltip: {},
        xAxis: [],
        yAxis: [{
          type: 'value',
          // max: 2,
          // splitNumber: 2,
          axisLabel: {
            show: true,
            // fontSize: 8,
            showMinLabel: true
          }
        }],
        series: [],
      },
      step: 30,
      total: 0,
      infoMap: [
        ['pressNum', '按压次数'],
        ['pressDepth', '按压深度'],
        ['pressPosition', '按压位置'],
        ['pressSpringback', '胸廓回弹'],
        ['pressFrequency', '按压频率'],
        ['pressRelaxratio', '按压放松比'],
        ['ventilateNum', '通气次数'],
        ['ventilateKeep', '通气保持'],
        ['ventilateOpen', '气道开放']
      ],
      newMap: {},
      echartArray: [],
    }
  },
  created () {
  },
  mounted () {

    window.prepare = this.prepare

    //测试数据
    let source4 = [{
      'pressNum': 80,
      'pressDepth': 10,
      'pressPosition': 3,
      'pressRelaxratio': 55,
      'ventilateNum': 75,
      'ventilateKeep': 88,
      'ventilateOpen': 99
    }, {
      'pressNum': 80,
      'pressSpringback': 50,
      'pressFrequency': 46,
      'pressRelaxratio': 55,
      'ventilateNum': 75,
      'ventilateKeep': 88,
      'ventilateOpen': 99
    }, {
      'pressNum': 80,
      'pressPosition': 3,
      'pressSpringback': 50,
      'pressFrequency': 46,
      'ventilateNum': 75,
      'ventilateKeep': 88,
      'ventilateOpen': 99
    }, {
      'pressNum': 80,
      'pressDepth': 10,
      'pressPosition': 3,
      'pressSpringback': 50,
      'pressFrequency': 46,
      'pressRelaxratio': 55,
      'ventilateNum': 75,
      'ventilateKeep': 88,
      'ventilateOpen': 99
    }, {
      'pressNum': 80,
      'pressDepth': 10,
      'pressPosition': 3,
      'pressFrequency': 46,
      'pressRelaxratio': 55,
      'ventilateNum': 75,
      'ventilateKeep': 88,
      'ventilateOpen': 99
    }]

    this.prepare(4, source4, 1480, 937)
  },
  methods: {
     //生成x轴数据
    xProcess (data) {
      var keys = Object.keys(data[0])
      var xArray = []
      for (let i = 0; i < keys.length; i++) {
        let x = {
          type: 'category',
          position: 'bottom',
          axisTick: {
            inside: true,
            show: false
          },
          axisLabel: {
            show: true,
            fontSize: 14,
            // margin: 9
          }
        }
        x.data = this.jcArray(keys.length, i, this.newMap.get(keys[i]))
        xArray.push(x)
      }
      return xArray
    },
     //生成series数据
    cycleSprocess (data) {
      const zh = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一']
      const sArray = []
      // 获取循环次数
      var keys = Object.keys(data[0])
      for (let i = 0; i < data.length; i++) {

        for (let k = 0; k < keys.length; k++) {
          let s = {
            type: 'bar'
          }
          let value = 0
          for (let index in data[i]) {
            if (index === keys[k]) {
              value = data[i][index]
              s.name = '第' + zh[i] + '循环'
              s.xAxisIndex = k
              sArray.push(s)
              s.data = this.jcArray(keys.length, k, value)
              break
            }
          }
        }
      }
      return sArray
    },
    jcArray (l, i, v) {
      const a = new Array(l)
      for (let j = 0; j < l; j++) {
        if (j === i) {
          a[j] = v
        } else {
          a[j] = ''
        }
      }
      return a
    },
    prepare (type, data, wdith, height) {
      if (this.echartArray.length > 0) {
        this.echartArray.forEach(function (item) {
          item.dispose()
        })
        this.echartArray = []
      }
      this.cleanMain()
      // var sourceData = JSON.parse(data)
      var sourceData = data
      if (type === 4) {
        this.newMap = new Map(this.infoMap)

        var draw = document.createElement('div')
        draw.style.height = height + 'px'
        draw.style.width = wdith + 'px'
        draw.id = 'draw'

        document.getElementById('main').appendChild(draw)

        var myChart = echarts.init(document.getElementById('draw'))
        this.echartArray.push(myChart)
        var op = lodash.cloneDeep(this.option)

        op.xAxis = this.xProcess(sourceData)
        op.series = this.cycleSprocess(sourceData)
         //主要代码 修改鼠标指向柱状图时的显示信息
        op.tooltip.formatter = function (params) {
          return params.seriesName + '<br />' + params.marker + params.name + ' ' + params.value + '%'
        }
        //Y轴数值添加%号
        op.yAxis = [{
          type: 'value',
          max: 100,
          axisLabel: {
            show: true,
            fontSize: 14,
            formatter: '{value}%'
          }
        }]
         //修改标题
        op.title = {
          text: '正确率',
          left: '3%',
          top: '3%',
          textStyle: {
            fontSize: 18
          }
        }
          //修改图形显示大小
        op.grid = {
          show: true,
          left: '3.5%',
          right: '1%',
          backgroundColor: '#f0f9ff',
          borderColor: 'rgba(204, 204, 204, 0.03)'
        }
          //修改图例展示
        op.legend = {
          show: true,
          top: '3%',
          right: '1%'
        }
        myChart.setOption(op)
      }
    },
      //清空页面
    cleanMain () {
      var main = document.getElementById('main')
      while (main.lastChild) {
        main.removeChild(main.lastChild)
      }
    }
  }
}
</script>   

3.数值为0时不渲染

其实要想数据为0不显示,并且需要分别设置样式时,就需要把X轴分段,分为不同的索引分别渲染。
option.xAxis数据如下图:

在这里插入图片描述

其中data数据如下图:

在这里插入图片描述

option.series数据如下图:
在这里插入图片描述

其中name属性影响图例显示的名称以及鼠标指向柱状图的的显示。xAxisIndex索引指向的不同的x轴段中显示的数据。

部分data数据如下图:
在这里插入图片描述

转载请注明出处或者链接地址:https://www.qianduange.cn//article/3265.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!