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

news2024/11/26 0:46:43

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数据如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(JVM)浅堆深堆与内存泄露

​浅堆深堆与内存泄露 1. 浅堆&#xff08;Shallow Heap&#xff09; 浅堆是指一个对象所消耗的内存。在 32 位系统中&#xff0c;一个对象引用会占据 4 个字节&#xff0c;一个 int 类型会占据 4 个字节&#xff0c;long 型变量会占据 8 个字节&#xff0c;每个对象头需要占用…

01.【Vue】Vue2基础操作

一、Vue Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&…

十五天学会Autodesk Inventor,看完这一系列就够了(七),工程图纸

众所周知&#xff0c;Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad&#xff0c;所以再学习Inventor&…

自动化测试 | 这些常用测试平台,你们公司在用的是哪些呢?

本文节选自霍格沃兹测试学院内部教材 测试管理平台是贯穿测试整个生命周期的工具集合&#xff0c;它主要解决的是测试过程中团队协作的问题。在整个测试过程中&#xff0c;需要对测试用例、Bug、代码、持续集成等等进行管理。下面分别从这四个方面介绍现在比较流行的管理平台。…

Spring入门-SpringAOP详解

文章目录SpringAOP详解1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知…

Anaconda+VSCode配置tensorflow

主要参考https://blog.csdn.net/qq_42754919/article/details/106121979vscode的安装以及Anaconda的安装网上有很多教程&#xff0c;大家可以自行百度就行。在安装Anaconda的时候忘记勾选自动添加path&#xff0c;需要手动添加环境变量path下面介绍tensorflow安装教程:1.打开An…

getRequestDispatcher()转发和sendRedirect()重定向介绍与比较

文章目录1. request.getRequestDispatcher()1.1请求转发和请求包含的区别1.2request域2.response.sendRedirect()3.请求转发与重定向的区别比较测试1. request.getRequestDispatcher() getRequestDispatcher()包含两个重要方法&#xff0c;分别是请求转发和请求包含。一个请求…

系分 - 案例分析 - 系统设计

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - 案例分析 - 系统设计结构化设计SD内聚偶然内聚逻辑内聚时间&#xff08;瞬时&#xff09;内聚过程内聚通信内聚顺序内聚功能内聚耦合内容耦合公共耦合外部耦合控制耦合标记耦合数据耦合非直接耦合补…

DTO 与 PO的相互转换

目录 常见Bean映射框架 Dozer Orika MapStruct ModelMapper JMapper 测试模型 转化器 OrikaConverter DozerConverter MapperStructConvert JMapperConvert ModelMapperConverter 测试 平均时间 吞吐量 SingleShotTime 采集时间 DTO&#xff08;Data Transfer …

Android项目Gadle统一依赖管理

一.Gradle管理依赖版本 在中大型Android项目中&#xff0c;都会有多个Module进行协同配合。这些module中可能会依赖同一个库的不同版本&#xff0c;这将导致一些问题&#xff0c;要么是代码冲突&#xff0c;要么是APK包体积增大&#xff0c;亦或是项目构建的时间变长&#xff…

在Revit里如何将普通墙与曲面墙的内壁连接

在Revit里如何将普通墙与曲面墙的内壁连接&#xff1f;创建异形建筑时&#xff0c;为了达到如图1所示的效果&#xff0c;该如何操作&#xff1b; 我们可以使用体量建模的方式来创建该类建筑&#xff0c;要点在于如将幕墙与曲面墙的内壁连接。具体方法如下&#xff1a; 一、创建…

ASP.NET Core+Element+SQL Server开发校园图书管理系统(一)

随着技术的进步&#xff0c;跨平台开发已经成为了标配&#xff0c;在此大背景下&#xff0c;ASP.NET Core也应运而生。本文主要基于ASP.NET CoreElementSql Server开发一个校园图书管理系统为例&#xff0c;简述基于MVC三层架构开发的常见知识点&#xff0c;仅供学习分享使用&a…

ubuntu20.04下出现protoc与gazebo版本问题

ubuntu20protocgazebo问题描述问题定位解决方案问题描述 今天在搞路径规划算法时&#xff0c;从git上拉下来一个算法&#xff0c;ros环境那些都有&#xff0c;但是在编译的时候出现了如下图所示的一下问题&#xff1a;&#xff08;为了方便搜索关键词&#xff09; In file incl…

锂离子电池热失控预警资料整理(三)

此前 个人搜集了一些锂电池热失控预警相关期刊、文献&#xff0c;并整理了一些个人认为重要的逻辑、知识点&#xff0c;希望通过此分享让有需要的人了解一些内容&#xff0c;如有问题欢迎同我探讨~ 锂离子电池热失控预警资料整理&#xff08;三&#xff09;九、基于数据分析的锂…

C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码

【FOCSTM32】双路直流无刷电机矢量控制器-使用文档 &#x1f4d5; 介绍 控制器主控芯片采用STM32F405RGT6&#xff0c;控制器底层基于HAL库和FreeRTOS实时操作系统&#xff0c;预留CAN、USART、SWD、USB接口各一&#xff0c;便于通信和控制的工程应用。该控制器提供双路无刷电…

2022年艺术品和古董投资策略研究报告

第一章 行业概况 艺术品是艺术家智力劳动成果的结晶。作为一种特殊商品流通于艺术市场&#xff0c;与其他商品相同的是&#xff0c;它也具备普通商品的基本属性&#xff1a;使用价值和价值。不同的是&#xff0c;艺术品的使用价值体现在精神层面而不是物质层面上&#xff0c;它…

RabbitMQ消息队列实战(1)—— RabbitMQ的体系

RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;用来在不同的应用之间共享数据。1983年&#xff0c;被认为是RabbitMQ的雏形的Teknekron创建&#xff0c;首次提出了消息总线的概念。中间经历过数个阶段的发展&#xff0c;一直到2004年&#xff0c;AMQP&#xff08;Advan…

02.指针的进阶

1.字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* ; 一般使用: int main() {char ch w;char *pc &ch;*pc w;return 0; } char * p---const char * p(因为常量字符串不能被修改) #include<stdio.h> int main() {const char * pstr "hel…

从汇编的角度了解C++原理——虚函数

文章目录1、虚函数1.1、虚函数储存结构1.2、子类重写虚函数1.3、在栈上调用虚函数1.4、在堆上调用虚函数(通过指针调用&#xff0c;多态)本文用到的反汇编工具是objconv&#xff0c;使用方法可以看我另一篇文章https://blog.csdn.net/weixin_45001971/article/details/12866064…

编译基于armV8架构的opencv,并在rock3a开发板上运行

近期在基于arm开发板做图像识别任务开发时&#xff0c;需要用到Opencv库 之前在做rknpu开发时&#xff0c;开发sdk里面已经集成了opencv 但是该opencv开发包不能实现imshow/VideoCapture等函数&#xff0c;经过调研&#xff0c;决定对opencv源代码进行编译&#xff0c;生成arm…