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实例教程(19) 使用HoTMetal(7)
Dec 23 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
Apr 06 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
js鼠标点击图片切换效果代码分享
Aug 26 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
AngularJS教程之MVC体系结构详解
Aug 16 Javascript
jQuery简单实现中间浮窗效果
Sep 04 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
Oct 19 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
JavaScript实现简单随机点名器
Nov 21 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 SMS短信服务验证码发送方法
2017/07/11 PHP
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
jquery使用经验小结
2015/05/20 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
js DOM的事件常见操作实例详解
2019/12/16 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python 多线程实现检测服务器在线情况
2015/11/25 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python3安装speech语音模块的方法
2018/12/24 Python
django序列化serializers过程解析
2019/12/14 Python
python中取绝对值简单方法总结
2020/07/24 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
自我评价格式
2014/01/06 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
工程项目经理任命书
2014/06/05 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
交通事故协议书范本
2016/03/19 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python