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代码
Aug 13 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
JavaScript动态创建div属性和样式示例代码
Oct 09 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
Jquery和Js获得元素标签名称的方法总结
Oct 08 Javascript
js实现的在线调色板功能完整实例
Dec 21 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
npm scripts 使用指南详解
Oct 08 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
php 购物车的例子
2009/05/04 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python实现人像动漫化的示例代码
2020/05/17 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
The Athlete’s Foot新西兰:新西兰最大的运动鞋零售商
2019/12/23 全球购物
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
《自选商场》教学反思
2014/02/14 职场文书
党员个人党性分析材料
2014/12/18 职场文书
安全生产奖惩制度
2015/08/06 职场文书
python库sklearn常用操作
2021/08/23 Python