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 ...
随机推荐
- 实验室 Linux 集群的管理常用命令
实验室有一个Linux集群,本文做一下记录. SSH相关命令 通过SSH登录集群中的其他机器上的操作系统(或虚拟机中的操作系统).操作系统之间已经设置免密码登录. 1. 无选项参数运行 SSH 通常使 ...
- linux 下RMAN备份shell脚本
RMAN备份对于Oracle数据库的备份与恢复简单易用,成本低廉.对于使用非catalog方式而言,将RMAN脚本嵌入到shell脚本,然后再通过crontab来实现中小型数据库数据库备份无疑是首选. ...
- jacob如何获取word文档的页码
ActiveXComponent app = new ActiveXComponent("Word.Application"); //启动word String inFile = ...
- js内置对象-Date对象
Date对象: Data对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义: //默认初始值定义: var dataName=new Date(); /*使用关键字new;Da ...
- ANT 发布项目中 build.xml 文件的详细配置
xml 代码 <?xml version="1.0" encoding="UTF-8"?> <!-- name:对应工程名字 default: ...
- YII 配置文件
用YIIFramework的库开发 .... Yii::createWebApplication($config); //没有run Yii::import(class1,true),在将class1 ...
- Android开发中这些小技巧
http://blog.csdn.net/guxiao1201/article/details/40655661 http://blog.csdn.net/guxiao1201/article/det ...
- IOS-多视图控制器之间的切换
1. 创建个单视图应用程序 2. 在向Main.storyboard中拖一个ViewController控制器 3. 在第一个viewController中添加一个按钮 4. 按着control键,推 ...
- Android百度地图开发(一)环境搭建
1.百度地图官方API文档下载 版本 使用说明 下载 Android SDK 通用资源下载 <离线地图>提供新版离线地图(百度矢量地图)与旧版离线地图(百度栅格地图)下载. 备注: 自An ...
- Tomcat启动报错:Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"]
在用MyEclipse做开发,启动Tomcat的时候,控制台老是报错Failed to initialize end point associated with ProtocolHandler [&q ...