详解Chart.js轻量级图表库的使用经验


Posted in Javascript onMay 22, 2018

前言

最近项目中遇到一个在页面中画图表的需求,需要一个扇状图和一个柱状图,虽然能使用svg或canvas绘制,但吃力还不一定讨好,所以研究接入了主流的第三方图表库供项目使用。下面主要记录我使用过程中的一些体验和解决方法,具体教程请移步官方文档。

技术选型

研究了Highcharts、百度的ECharts、阿里的G2和Charts.js四个图表库,由于项目对图表需求不大,图表不复杂,所以引入了轻量级的Charts.js。Chart.js很容易上手,只需要在页面中引用脚本文件,并创建 <canvas> 节点即可渲染出图表。且为你的数据提供 8 种可视化展现方式,每种方式都具有动态效果并且可定制;在所有现代浏览器(IE9+)上都有高效的绘图效率;响应式布局。

GitHub源码: https://github.com/nnnick/Chart.js
Chart.js文档:http://www.bootcss.com/p/chart.js/

引入

GitHUb上下载源码,把里面的dist/Chart.bundle.js文件引入项目即可使用;查看源码,发现其兼容了多种模块加载方式,所以我使用requireJs在页面中加载。

使用经验

①图表颜色值个数可以不与数据个数相等,如

var pieConfig = {
   type: 'pie',
   data: {
     datasets: [{
      data: [10, 20],
      backgroundColor: ['#debd5a', '#ff6d4a', '#3cc9bf', '#7599e9',]
     }]
  }
}

②可以取消响应式options: {responsive: false},方便控制图表的大小,canvas多大图表便多大,canvas不会自动占满外层容器。

③取消legend的点击事件,因为点击legend会默认隐藏该数据的占比,所以我需要去掉点击事件,设置legend: {onClick: function () {}},修改点击事件。

④把legend由默认的矩形修改成正方形,设置legend的字体大小和色值

options: {
  legend: {
   position: 'right',
   labels: {
    boxWidth: 14,// 修改宽度
    fontSize: 14,
    fontColor: '#666666'
   }
}

效果如下

详解Chart.js轻量级图表库的使用经验

⑤柱状图去掉网格线,设置轴线颜色、矩形的宽度和y轴数据从0开始展示。由于使用的Chart.js 2.0,配置参数变化很多,所以网上很多列子已失效,这里给出有效的配置代码

options: {
  scales: {
   xAxes: [{
    gridLines: {
     color: 'rgba(0, 0, 0, 0)',// 隐藏x轴方向轴线
     zeroLineColor: '#666666'// 设置轴颜色
    },
    barPercentage: 0.2,// 设置柱宽度
    ticks: {// 设置轴文字字号和色值
     fontSize: 12,
     fontColor: '#666666'
    }
   }],
   yAxes: [{
    gridLines: {
     color: 'rgba(0, 0, 0, 0)',// 隐藏要y轴轴线
     zeroLineColor: '#666666'
     },
     ticks: {
      fontSize: 12,
      beginAtZero: true,// y轴数据从0开始展示
      fontColor: '#666666'
      }
   }]
  }
}

效果如下

详解Chart.js轻量级图表库的使用经验

⑥给图表tooltips的数据加上单位,可以使用tooltips的callback函数设置

tooltips: {
 callbacks: {
  label: function (tooltipItem, data) {
   var value = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index] + '%';
   var title = data.labels[tooltipItem.index] + ':';
   return title + value;
   }
  }
}

效果如下

详解Chart.js轻量级图表库的使用经验

tooltips: {
  callbacks: {
   label: function (tooptipItem) {
    return tooptipItem.yLabel + '个' ;
   }
  }
}

效果如下

详解Chart.js轻量级图表库的使用经验

总结

语言功底有限,表达不到位敬请原谅,本文主要作为自己项目总结使用。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
formvalidator验证插件中有关ajax验证问题
Jan 04 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
Jquery给基本控件的取值、赋值示例
May 23 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
你不知道的高性能JAVASCRIPT
Jan 18 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
15个顶级开源JavaScript框架和库
Oct 10 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 Javascript
VUE2.0中Jsonp的使用方法
May 22 #Javascript
mpvue构建小程序的方法(步骤+地址)
May 22 #Javascript
基于mpvue的小程序项目搭建的步骤
May 22 #Javascript
安装vue-cli的简易过程
May 22 #Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 #Javascript
Vue单页及多页应用全局配置404页面实践记录
May 22 #Javascript
Vue页面骨架屏的实现方法
May 22 #Javascript
You might like
深入密码加salt原理的分析
2013/06/06 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
layui实现文件或图片上传记录
2018/08/28 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python批量生成本地ip地址的方法
2015/03/23 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Django的CVB实例详解
2020/02/10 Python
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
UNIX特点都有哪些
2016/04/05 面试题
关于教师节的广播稿
2014/09/10 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
财务整改报告范文
2014/11/05 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
关于军训的感想
2015/08/07 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python