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 相关文章推荐
JQuery实现的在新窗口打开链接的方法小结
Apr 22 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
jQuery实现文本框输入同步的方法
Jun 20 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
JS从一组数据中找到指定的单条数据的方法
Jun 02 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
ES6新数据结构Map功能与用法示例
Mar 31 Javascript
node使用Koa2搭建web项目的方法
Oct 17 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
Oct 25 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
Jan 21 jQuery
jQuery 查找元素操作实例小结
Oct 02 jQuery
浅谈TypeScript 索引签名的理解
Oct 16 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
php不写闭合标签的好处
2014/03/04 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
PHP实现图片压缩
2020/09/09 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
python str与repr的区别
2013/03/23 Python
Python实战购物车项目的实现参考
2019/02/20 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
大学毕业后的十年规划
2014/01/07 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
导游欢迎词范文
2015/01/23 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python