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 缓存策略的BUG的解决方法
Jul 21 Javascript
Javascript valueOf 使用方法
Dec 28 Javascript
基于Jquery的简单&简陋Tabs插件代码
Feb 09 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
实例详解angularjs和ajax的结合使用
Oct 22 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
javascript 中的继承实例详解
May 05 Javascript
移动端web滚动分页的实现方法
May 05 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
Mar 05 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
详解如何使用node.js的开发框架express创建一个web应用
Dec 20 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 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
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
Smarty模板语法详解
2019/07/20 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python变量和字符串详解
2017/04/29 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python pycharm的安装及其使用
2019/10/11 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
导游词格式
2015/02/13 职场文书
大学生团员个人总结
2015/02/14 职场文书
2015年员工工作总结范文
2015/04/08 职场文书