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 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
IE不出现Flash激活框的小发现的js实现方法
Sep 07 Javascript
jquery 入门教程 [翻译] 推荐
Aug 17 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
javascript实现回车键提交表单方法总结
Jan 10 Javascript
Js apply方法详解
Feb 16 Javascript
详解JavaScript 为什么要有 Symbol 类型?
Apr 03 Javascript
VUE 实现复制内容到剪贴板的两种方法
Apr 24 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 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把数字转成人民币大写的函数分享
2014/06/30 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
tensorflow自定义激活函数实例
2020/02/04 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
毕业生自荐书
2014/02/03 职场文书
思想品德课教学反思
2014/02/10 职场文书
师德师风承诺书
2014/05/23 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
培训师岗位职责
2015/02/14 职场文书
货款欠条范本
2015/07/03 职场文书
《失物招领》教学反思
2016/02/20 职场文书