vue基于v-charts封装双向条形图的实现代码


Posted in Javascript onDecember 09, 2019

我们先来看实现效果

vue基于v-charts封装双向条形图的实现代码

以这张图来举例

通过重新封装可以实现双向条形图的显示

既可以横向比较同一天的收入支出情况

也可以竖向比较不同日期的收入/支出情况

我们先来准备数据源:

{
   columns: ["日期", "收入", "支出"],
   rows: [
    {
     日期: "8/7",
     收入: -233,
     支出: 120
    },
    {
     日期: "8/5",
     收入: -322,
     支出:450
    },
    {
     日期: "7/4",
     收入: -432,
     支出: 430
    },
    {
     日期: "10/4",
     收入: -233,
     支出: 210
    }
   ]
  };

注意这里一定要把其中一项的值设置为负数,否则无法显示到左边一栏

设置完数据我们可以先看一眼效果:

vue基于v-charts封装双向条形图的实现代码

初步实现条形图一左一右的效果

那如何实现同一维度的两个指标在同一行显示?

我们在配置属性中加上这么一个属性
"stack"

this.chartSettings = {
   stack: {
    xxx: [`收入`, `支出`]
   }
  };

查看官方文档,我们来理解一下这个属性

series[i]-bar.stack string
数据堆叠,同个类目轴上系列配置相同的stack值可以堆叠放置。

也就是说,设置了这个属性,我们可以让两个条形图合并为一个

如果不考虑正负问题,堆叠即可实现下面这个效果

vue基于v-charts封装双向条形图的实现代码

感兴趣的可以去官方看一下在线运行的演示效果
https://www.echartsjs.com/examples/zh/editor.html?c=bar-negative

设置完这个属性我们来看一下效果

vue基于v-charts封装双向条形图的实现代码

可以看到同一日期的收入支出情况已经在一行显示了

最后我们来解决坐标轴及图形标签值显示为负数的问题

我们可以在 chartsetting 属性中修改 label 的 formatter 属性

自定义标签的文字
根据我们的需求,通过 Math.abs()的方法,以绝对值的形式显示

this.chartSettings = {
   label: {
    normal: {
     show: true,
     formatter: params => {
      return `${params.seriesName}:${Math.abs(params.value)}`;
     }
    }
   }
  };

坐标轴数值修改也是一个道理

afterConfig(options) {
   options.xAxis[0].axisLabel = {
    formatter: function(value) {
     return Math.abs(value);
    } //显示的数值都取绝对值
   };
   return options;
  },

这样就可以实现我们的最终效果了

vue基于v-charts封装双向条形图的实现代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript图像处理—为矩阵添加常用方法
Dec 27 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
为jquery的ajaxfileupload增加附加参数的方法
Mar 04 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 Javascript
Js控制滑轮左右滑动实例
Feb 13 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
jquery实现的Accordion折叠面板效果代码
Sep 02 Javascript
AngularJS实现元素显示和隐藏的几个案例
Dec 09 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
Jun 28 Javascript
引用jquery框架后出错的解决方法
Aug 09 Javascript
js实现交通灯效果
Jan 13 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 #Javascript
vue如何使用async、await实现同步请求
Dec 09 #Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 #Javascript
vue新建项目并配置标准路由过程解析
Dec 09 #Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
Dec 09 #Javascript
简述Vue中容易被忽视的知识点
Dec 09 #Javascript
vue路由传参三种基本方式详解
Dec 09 #Javascript
You might like
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
smarty中post用法实例
2014/11/28 PHP
php查询及多条件查询
2017/02/26 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
jQuery学习笔记[1] jQuery中的DOM操作
2010/12/03 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Django中Model的使用方法教程
2018/03/07 Python
学生信息管理系统python版
2018/10/17 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
基于python检查矩阵计算结果
2020/05/21 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
建筑实习自我鉴定
2013/10/18 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
个人先进事迹材料
2014/12/29 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android