chart.js接口开发:X轴步长和Labels旋转角
一. 当初为什么选择chart.js
当初项目使用库是Zepto,Zepto能支持的chart处理库太少。也是为了使得项目比较轻量化,所以选择了chart.js。
但是最后的显示结果实在太差,放弃了char.js,还是使用jquery+highstock来完成chart需求。
总而言之,项目的chart需求较低,项目要求较轻量,可以使用chart.js。
但是,chart.js缺少几个重要的接口,这里列出几个。
二. chart.js缺少的接口
1. x轴步长。
bug:数值很多,x轴显示的labels重合在一起了。
解决方法:添加tickInterval接口
找到option对象,添加tickInterval,代码如下
var scaleOptions = {
...
tickInterval : this.options.tickInterval,
...
}
找到draw函数,在each下面处理,代码如下
draw : function(){
...
each(this.xLabels, function(label, index){
...
ctx.lineWidth = this.lineWidth;
ctx.strokeStyle = this.lineColor;
// handle tickInterval
if (this.tickInterval) {
if (parseInt((index % this.tickInterval).toFixed(0)) !== 0) return;
}
...
}, this)
...
}
2. X轴Labels旋转角度接口。
Feature:x轴Label旋转角度与数据量有关,数据量过多选装角度很大,数据量小则旋转角度很小。但是现实不统一,效果很差,需要统一旋转角度。
实现方法:添加customXLabelRota接口
找到option对象,添加customXLabelRota和customXLabelRotaMinNumber,代码如下
var scaleOptions = {
...
customXLabelRota : this.options.customXLabelRota,
customXLabelRotaMinNumber : this.options.customXLabelRotaMinNumber,
...
}
找到calculateXLabelRotation函数。添加如下代码
calculateXLabelRotation: function(){
...
if ...{
...
if (this.customXLabelRota && this.xLabels) {
if (this.customXLabelRotaMinNumber) {
if (this.customXLabelRotaMinNumber < this.xLabels.length) {
this.xLabelRotation = this.customXLabelRota;
}
} else {
this.xLabelRotation = this.customXLabelRota;
}
}
}
else {
...
}
}
3. 双曲线时,tooltip会显示多个
bug描述如上,解决方法是修改tooltip显示时添加的data,完美的解决多曲线的代码暂时没有完成,这里只解决双曲线的情况,代码如下
getPointsAtEvent : function(e){
var pointsArray = [],
eventPosition = helpers.getRelativePosition(e);
helpers.each(this.datasets,function(dataset){
helpers.each(dataset.points, function(point){
if (point.inRange(eventPosition.x,eventPosition.y))
pointsArray.push(point);
});
},this);
// start [BugFix]: show too much tooltips
if (this.datasets.length >= pointsArray.length){
return pointsArray;
}
if (this.datasets.length == 1){
var newPointsArray = [pointsArray[parseInt(pointsArray.length / 2)]];
}else if (this.datasets.length == 2){
var newPointsArray = [pointsArray[parseInt(pointsArray.length / 2)], pointsArray[parseInt(pointsArray.length / 2)+1]];
}else {
var newPointsArray = pointsArray;
}
return newPointsArray
// end [BugFix]
//return pointsArray;
},
chart.js接口开发:X轴步长和Labels旋转角的更多相关文章
- 利用h5,chart.js监测手机三轴加速度,用以研究计步算法等
用window.DeviceMotionEvent来判断手机浏览器是否支持访问硬件资源,window.addEventListener('devicemotion',deviceMotionHandl ...
- 报表开发工具Finereport移动端app js接口列表【全】
应用报表工具Finereport的开发人员会发现其移动端app 同样也推出了很多js接口,那这些接口到底有多少,其移动端又有哪些地方支持调用js,这些接口具体又该如何调用呢.根据我平时的开发经验,给大 ...
- 报表开发工具中开放的部分图表js接口列表
1.. 描述 报表开发工具FineReport 8.0版本中开放了部分图表js接口,在具体应用的过程中很多人都不知道这些接口到底有什么作用,该怎么应用,所以根据我自己的应用在下面归纳了这些新开放js接 ...
- 关于chart.js 设置canvas的宽度为父级元素的宽度的百分百 以及 X轴上面刻度数据太多如何处理
今天在做一个数据统计的界面的时候,需要做折线统计图,在网上找了一圈发现数据统计的插件还是不少的,本着轻量级的的原则选择了Chart.js,后来在做的过程中便遇到两个问题,以此记录下来,和刚刚接触前端的 ...
- chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...
- 微信开发-业务域名、JS接口安全域名、网页授权域名
在微信公众平台上可配置这些域名. 1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要 ...
- Chart.js Y轴数据以百分比展示
新手一枚,解决的问题喜欢记录,也许正好有人在网上迷茫的百度着.-0- 最近使用Chart.js做折线图的报表展示,直接显示整数啥的很好弄毕竟例子直接在哪里可以用,百分比就没办法了.百度慢慢汲取营养,虽 ...
- 微信开发——测试号申请,接口配置,JS接口安全域名,自定义菜单
1.申请测试账号: 先申请公众号后,点击进入公从号的管理页面:找到“开发者工具”,找到“公众平台测试账号”,点击“进入”. 2.接口配置信息设置 必须要外网哦,也就是微信服务器要能访问到你填写到url ...
- JS组件系列——开源免费图表组件:Chart.js
前言:最近被开源免费得有点上火了,各种组件首先想到的就是是开源否.是否免费.是否和bootstrap风格一致.想着以后做报表肯定要用到图表组件的,于是在Bootstrap中文网上面找到了Chart.j ...
随机推荐
- sound tips
ASaudio&SoundAS 两个开源项目阅读: ASaudio&SoundAS 都是比较小巧的声音控制,但似乎都不能直接拿到项目只直接使用. ASaudio ASaudio的Tra ...
- trunc的使用
1.日期比较时精确到日,可以使用 TRUNC(sysdate,'dd')函数.函数支持格式有:yyyy MM dd hh Mi可以用 select TRUNC(sysdate,'yyyy') fr ...
- Nodejs学习之一 下载安装与部署nodejs
1,下载nodejs 访问nodejs官网 www.nodejs.org/download/ 下载与机器相匹配的版本 2,安装nodejs 下载下来的msi包一直点击下一步即可 3,部署环 ...
- hdu 1541 Stars(树状数组)
题意:求坐标0到x间的点的个数 思路:树状数组,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可. 注意:树状数组下标从1开始(下标为0的话 ...
- android命名规范
Android 开发规范 (陈杨) (一)注意事项 1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了. 2. 缩进统一为4个空格,将Tab si ...
- 数往知来 asp.net 聊天室问题解决方案<十六>
1:在服务端创建了一个负责监听的sokcet //三个:采用TCP协议. ListenSocket = new Socket(AddressFamily.InterN ...
- Http状态码的种类及含义
1xx 临时响应:2xx 成功:3xx 重定向: 4xx 请求错误: 5xx 服务器错误: http://www.hostspaces.net/wenzhang-detail.php?id=198 常 ...
- 耳机jack构造及在应用时可能出现的问题
目前市场上耳机分为4环耳机(图1所示,iphone型)和3环耳机(图2所示).4环耳机称为headset,3环耳机称为headphone,两者之间的区别就是4环耳机比3环耳机多个micphone.而J ...
- cubieboard中使用py-kms与dnsmasq搭建局域网内全自动KMS激活环境
众所周知,KMS激活方式是当前广大网民“试用”windows,office的最广泛的激活方式.几乎可以用于微软的全线产品. 但是在本机使用KMS类的激活工具总是有些不放心,一方面每隔180天都要重新激 ...
- PHP 碎片
1. $_SERVER['REMOTE_ADDR'] cannot be modified by the user or via HTTP so you CAN trust it. -- 用这个可以有 ...