echarts+vue实现柱状图分页显示

news2025/1/18 10:49:08

非常感谢这篇博客:ECharts柱状图分页显示(数据循环)_s小布丁的博客-CSDN博客

大家好,我是南宫,很久没有更新博客了。

本文参考了这篇博客里面的思路和分割数据的代码,不过我用的是vue页面,后面没有照搬他的代码,而是我自己根据我的项目需求拆分了我的函数,下面整理一下思路。

首先说一下我的需求:用柱状图展示出一系列分类的数据,结果发现分类共9种,每类的名字都很长,一行显示的时候x轴文字直接重叠到飞起,就算是弄成x轴3个字一换行,效果也很难看,变成换了很多行。问了产品以后,让我改成分页的形式。

最终的效果图如下,小伙伴先看看。

右上角的点点就是页码,共9个数据,但是最多显示4个,看起来就还行了。

下面来说一下我的思路,有类似的需求的小伙伴可以往下看:

1.   调用接口获取数据,然后在数据里找到x轴、y轴要显示的字段,用map方法映射出了两个新数组,保存起来,作为x轴,y轴的数据。

我这里认为type是x轴的数据,value是y轴的数据。

  getImportantPersonList().then(res => {
        // 从接口返回的数据中取出x轴和y轴数据
        const valueList = res.map(item => item.num)
        const typeList = res.map(item => item.type)
  })

2.  把拿到的x轴和y轴数据调用分割数组的方法,分别分割成一个二维数组(每个元素是每一页要展示的数据)分割数组的方法,是从前面那个博客里拿来用的。

然后默认肯定是把第一页的数据渲染出来。

        // 分割数组的方法
        function arrayChunk(array, size){
          let data = []
          for (let i = 0; i < array.length; i += size) {
            data.push(array.slice(i, i + size))
          }
          return data
        }
        // 把x轴和y轴数据分割完并记录下来
        this.valueList = arrayChunk(valueList, 4)
        this.typeList = arrayChunk(typeList, 4)
        // 获取完数据后,默认显示第一页
        this.currentPersonPage = 0
        this.setPeoplePage()

 3. 生成页码的小圆点。

遍历切割好的二维数组,二维数组有几个元素,就表示分为几页,根据这个来渲染小点。

除了准备小圆点的数组,还要准备小圆点高亮的数据,来匹配当前选中的页。

        // 统计有多少页
        this.followPersonPages = []
        for (var j = 0; j < this.valueList.length; j++) {
          this.followPersonPages.push(j+1);
        }
         <div class="dot-tabs-bar">
            <ul>
              <li
                :class="{ selected: index === currentPersonPage }"
                v-for="(item, index) in followPersonPages"
                :key="index"
                @click="choosePersonPage(index)"
              ></li>
            </ul>
          </div>

4. 点击小圆点,切换展示的分页。

给小圆点绑定点击事件,把对应的index传入,除了把当前高亮的下标改了以后,也要修改echarts的option,把里面渲染的数据也改成第index页的x轴数据和y轴数据

// 切换要查看折线图的第几页
    choosePersonPage(index) {
      this.currentPersonPage = index
      this.setPeoplePage()
    },

 5. 因为加载好数据后需要渲染数据,点击分页也需要渲染新的数据,所以我觉得“渲染数据”的功能可以被抽象出去到另一个函数,所以就抽了一个setPeoplePage的方法出来。

这个方法只负责根据this.currentPersonPage渲染当前页的数据,所以不需要参数了

(下面我省略了其他无关的代码,注意this.currentPersonPage)

// 绘制当页的折线图
    setPeoplePage() {
      let myChart = echarts.init(document.getElementById('echartsFour'))
      myChart.setOption({
          tooltip: {
            ...
          },
          grid: {
            ...
          },
          xAxis: [
            {
              ...
              axisLabel: {
                ...
              },
              data: this.typeList[this.currentPersonPage],
            },
          ],
          yAxis: [
            {
              ...
            },
          ],
          series: [
            {
              name: '人员情况',
              type: 'bar',
              ...
              data: this.valueList[this.currentPersonPage],
              zlevel: 0,
              label: {
                ...
              },
            },
            {
              // 分隔
              type: 'pictorialBar',
              ...
            },
          ],
        })
    },

 也就是说,要渲染分页后的柱状图,只需要设置this.currentPersonPage的值为第几页,然后调用this.setPeoplePage方法去渲染就好了。这样既可以让渲染方法变得纯粹,又可以让获取数据后的处理函数这里不太冗长。

亲测可用。有疑问的小伙伴可以在评论区提问,如果能帮到你,那就太好了。

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

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

相关文章

【Kubernetes系列】工作负载资源之Deployment

文章目录概述Deployment用例创建 DeploymentDeployment 状态更新 Deployment回滚 DeploymentDeployment 规约Pod 模板副本选择算符策略进度期限秒数最短就绪时间修订历史限制paused&#xff08;暂停的&#xff09;概述 Deployment 很适合用来管理你的集群上的无状态应用&#…

数据结构--不定长顺序表

1.不定长顺序表 与定长顺序表相比不定长顺序表的区别在于我们可以通过扩容来进行增添元素的存储单元。 2.结构 是对定长顺序表的一种改进&#xff0c;在初始时开辟内存被利用完后&#xff0c;还要继续插入数据时&#xff0c;这时候据需要扩容。故顺序表的结构设计就要发生变…

BHQ-1羧酸是一种黑暗淬灭剂BHQ-1 acid,1190431-95-8

英文名称&#xff1a;BHQ-1 acid 中文名称&#xff1a;BHQ-1酸 丁酸&#xff0c;4-[[4-[2-[2-甲氧基-5-甲基-4-[2-&#xff08;4-甲基-2-硝基苯基&#xff09;二氮基]苯基]二氮基]苯基]甲氨基]- 分子量&#xff1a;504.55 化学式&#xff1a;C26H28N6O5 CAS&#xff1a;119…

8. 微服务之消息队列RabbitMQ以及五种消息队列模式

8.1 同步调用 即客户端向服务端请求做数据处理&#xff0c;客户端需要一直等待服务端处理直到返回结果给客户端 同步调用存在的问题&#xff1a; 耦合度高&#xff1a;每次加入新的需求&#xff0c;都要修改原来的代码性能下降&#xff1a;调用者需要等待服务提供者响应&…

C++模拟OpenGL库——图形学状态机接口封装(二):基于状态机接口的画线画三角形

目录 画线操作 画三角形操作 按区间取点来进行绘制 加入纹理 画线操作 上次我们定义了一系列状态机接口&#xff0c;并遗留了&#xff1a; void Canvas::gtDrawArray(DRAW_MODE _mode, int _first, int _count) 没有去实现&#xff0c;这次对他进行一个实现&#xff0c;…

计算机网络-传输层(TCP协议特点和TCP报文段格式,TCP连接管理)

文章目录1. TCP协议特点&#xff0c;报文段格式2. TCP连接管理1. TCP协议特点&#xff0c;报文段格式 TCP是面向连接&#xff08;虚连接&#xff09;的传输层协议每一条TCP连接只能有两个端点&#xff0c;每一条TCP连接只能是点对点的。TCP提供可靠交付的服务&#xff0c;无差…

代码随想录61——额外题目【数组】:1365有多少小于当前数字的数字、941有效的山脉数组、1207独一无二的出现次数

文章目录1.1365有多少小于当前数字的数字1.1.题目1.2.解答2.941有效的山脉数组2.1.题目2.2.解答3.1207独一无二的出现次数3.1.题目3.2.解答1.1365有多少小于当前数字的数字 参考&#xff1a;代码随想录&#xff0c;1365有多少小于当前数字的数字&#xff1b;力扣题目链接 1.1…

MySQl(六):日志

Mysql&#xff1a;日志日志错误日志二进制日志查询日志慢查询日志事务日志日志 错误日志 Linux 实时查看尾部内容 创建一个错误&#xff0c;进入log去看 二进制日志 查询日志 慢查询日志 事务日志 数据库都具有事务日志&#xff0c;用于记录所有事务以及每个事务对数据库所做…

IAST技术进阶系列(五):共生进化,自适应云原生

伴随着云计算带来的基础设施变革以及应用技术架构的转变&#xff0c;云原生和云原生应用已经成为耳熟能详的词汇。Gartner预测&#xff0c;到2025年&#xff0c;云原生平台将成为95%以上新数字化计划的基础。伴随云原生场景的普及&#xff0c;云原生应用将引领下一个应用时代&a…

day2【代码随想录】移除元素

文章目录一、移除数据元素1、暴力求解2、双指针法3、相向双指针法二、删除有序数组中的重复项三、删除有序数组中的重复项II四、移动零一、移除数据元素 一个数组 nums 和一个值 val&#xff0c;需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不…

GitHub热榜 这份《亿级流量并发手册》彻底揭开阿里高流量的秘密

我们知道&#xff0c;高并发代表着大流量&#xff0c;高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案&#xff0c;从而抵抗巨大流量的冲击&#xff0c;带给用户更好的使用体验。这些方案好似能操纵流量&#xff0c;让流量更加平稳得被系统中的服务和组件…

从零开始学前端:DOM、BOM、焦点事件、键盘事件 --- 今天你学习了吗?(JS:Day20)

从零开始学前端&#xff1a;程序猿小白也可以完全掌握&#xff01;—今天你学习了吗&#xff1f;&#xff08;JS&#xff09; 复习&#xff1a;从零开始学前端&#xff1a;CSSOM视图模式 — 今天你学习了吗&#xff1f;&#xff08;JS&#xff1a;Day19&#xff09; 文章目录从…

一致性哈希算法【图解理论 + 代码实现】

一致性哈希算法&#x1f4d6;1. 普通哈希算法存在的问题&#x1f4d6;2. 一致性哈希算法概念&#x1f4d6;3. 代码实现&#x1f4d6;1. 普通哈希算法存在的问题 在介绍一致性哈希算法前&#xff0c;我们先来看两个场景&#xff1a; 场景一&#xff1a; 现在&#xff0c;假如有…

liunx 磁盘分区格式报错问题及挂载步骤

磁盘分区 1.lsblk查看未分区空间 2.执行fdisk /dev/vda进行分区 3.n(小写n开始分区)-&#xff08;顺序&#xff0c;可以默认顺序&#xff09;-&#xff08;分区的多少&#xff0c;默认是剩下所有&#xff09;-&#xff08;分区大小&#xff0c;默认是G&#xff09;-w&#xf…

WebRTC系列 -- iOS 音频采集之 ADM、APM和AudioState

文章目录 1. adm和apm1.1 adm类关系简介1.2 adm及apm的创建2. AudoState在WebRTC的音频模块有三个比较重要的模块,ADM、APM和AudioState,其中ADM是audio device model 也就是负责处理音频采集和播放数据的模块,APM是Audio Processing model ,AudioState主要是为了处理多个c…

十六、Lua 文件 I/O的学习

Lua 文件 I/O Lua I/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件相关的操作。完全模式&#xff08;complete …

公众号免费查题接口调用

公众号免费查题接口调用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

行业安全解决方案|腾讯游戏安全一站式防护,助力对抗外挂和DDoS攻击

近年来&#xff0c;在技术革新、监管加强、用户需求提升的三重作用下&#xff0c;游戏行业进入发展转型期&#xff0c;并涌现出游戏精品化、产业跨界升级、游戏出海三大趋势。随着游戏行业的繁荣&#xff0c;游戏厂商面临越来越多的黑灰产攻击、内容违规等游戏安全难题&#xf…

使用python画柱状图(matplotlib.pyplot)-- 你想要的设置这张图基本都包括

本人写论文时画的图&#xff0c;总结一下方法&#xff1a; 安心看下去&#xff0c;你应该就可以画出一个好看的柱状图&#xff0c;基本上需要的设置都有哦&#xff01;&#xff01;&#xff01; 目录 1 首先引入画图所需要的包Matplotlib 2 Matplotlib Pyplot 3 画柱状图 …

宿舍管理系统的设计与实现/学生宿舍管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…