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 ...
随机推荐
- db2数据库创建一张表,并为该表加上主键递增的性能和中间表的创建的sql语句
创建角色表 CREATE TABLE NBCTXP.TBL_NBC_NONBANKROLE ( ID BIGINT NOT NULL, ROLENAME VARCHAR(50), C ...
- 【转】Linux设备驱动之Ioctl控制
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html 大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能 ...
- Android内存控制小技巧-使用矢量图来节省你的内存并简化你的开发。
先上一个 位图和矢量图的 说明.http://zhidao.baidu.com/link?url=xwvs5CBzWeh15O3Ee4bICwCqg4PCQWwg5oZ0a6CVydbVZzufqrI ...
- 配置java环境时,java的path地址放在其他地址的前面还是后面?
PATH环境变量里是按顺序查找的,如果电脑里只有一个jdk,放哪都一样,有多个放前面的会优先. 一般是放在最前面吧,以免其他在path中的程序需要用到Java环境而由于在JAVA_PATH之前 ...
- unity, audio falloff
要达到声音随距离衰减的效果,需要使用3D音效,即把Spatial Blend设为1,然后再调节Min Distance和Max Distance(蓝色线框球体),并选择合适的Volume Rollof ...
- 嵌入式 Linux线程同步读写锁rwlock示例
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁.1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞:2. ...
- 开发框架XUtils
xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的O ...
- 一个c++剧情脚本指令系统
项目希望能够实现一些剧情动画,类似角色移动,镜头变化,台词展现等.剧情动画这东西随时需要修改调整,不能写死在代码里.考虑之后认为需要做一个简单的DSL来定制剧情脚本,策划在脚本里按顺序写入命令,然后我 ...
- Module ngx_http_index_module nginx的首页模块
Example Configuration:例子配置文件Directives 指令 index 首页 The ngx_http_index_module module processes r ...
- 免费CDN
什么是CDN? CDN (Content Delivery Network) ,CDN 是包含可分享代码库的服务器网络. CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将 ...