摘自:http://www.cnblogs.com/pengcl/p/3278388.html

由于工作原因,需要画图表,但在图表的该度的取值上就出现了问题,但现在关于图表的控件已经很多了,那应该也有成熟的算法了,经过在网上努力寻找前人们是足迹,算给我找到了这编文章,问题总算解决了!!!---故记。

(1)步长规范化是关键

一般地,我们在标定坐标轴时,给出的参数是:起点、终点和刻度数,因为我们程序设计人员对在一个多大的区域面积内绘制多少个刻度比较美观有直观感觉,相反,而对多大步长则印象较浅。当然,知道刻度数和起点与终点值求步长是很容易的,如下式:

CorStep=(CorMax-CorMin)/CorNumber

式中,CorMax、CorMin、CorNumber分别对应起点、终点和刻度数。步长求出后。我们只要将步长求以lO为底的对数,即可获得步长的数量级,见下式:

Temp=Log(corStep)/Log(10)

或者

Temp=Log(CorStep)/Log(10)+1

式中,Log代表自然对数。至于取哪个公式,需要根据CorStep是否是lO的整数次幂而定。

进而将步长其规范化到0到1的范围内,方法如下:

NewCopStep=CorStep/(10^Temp)

式中,符号“^”代表取幂的意思。

然后根据新的步长取值范围,将新的取值定位在:0.1、O.2、0.25、0.5、1几个常规步长上,称为StardardStep.最后,再根据数量级将规范的步长恢复到本来的数量级上,见下式:

FinalStep=StardardStp*Temp

(2)起点的规范化

一般说来.我们的起点应该是小于等于原来的起点,同时,起点坐标是步长的整数倍比较符合人们的习惯。这一点容易做到,见下式:

NewCorMin=(Int(CorMin/FinalStep))*FinalStep

其中,Int是取整函数。

(3)终点的规范化

按惯例,我们的终点应该是大于等于原来的终点,同样,终点坐标是步长的整数倍比较符合人们的习惯,见下式:

NewCorMax=(Int(CorMax/FinalStep)+1)+FinalStep

其中,Int是取整函数。

(4)最后的修正我们按上面的公式确定完参数后,新确定的步长、起点、终点值有可能使得刻度数与原来刻度数不等。这里是否需要调整呢?如果需要,我们应该如何调整呢?笔者认为,如果新算得的刻度数大于等于原来设定的刻度数,就不应该调整了。如果新算得的刻度数小于原来设定的刻度数,就应该将其调整为原来的刻度数。同时,在步长不动的情况下,分别将起点与终点进行再次修正。

下面是对应的程序:

注:源文为VB代码,由于工作需要,转为javascript代码。

function standard(cormax,cormin,cornumber){
var tmpmax,tmpmin, corstep,tmpstep,tmpnumber,temp,extranumber;
if(cormax<=cormin)
return ;
corstep=(cormax-cormin)/cornumber;
if(Math.pow(10,parseInt(Math.log(corstep)/Math.log(10)))==corstep){
temp = Math.pow(10,parseInt(Math.log(corstep)/Math.log(10)));
}else{
temp = Math.pow(10,(parseInt(Math.log(corstep)/Math.log(10))+1));
}
tmpstep = (corstep/temp).toFixed(6);
//选取规范步长
if(tmpstep>=0&&tmpstep<=0.1){
tmpstep = 0.1;
}else if(tmpstep>=0.100001&&tmpstep<=0.2){
tmpstep = 0.2;
}else if(tmpstep>=0.200001&&tmpstep<=0.25){
tmpstep = 0.25;
}else if(tmpstep>=0.250001&&tmpstep<=0.5){
tmpstep = 0.5
}else{
tmpstep = 1;
}
tmpstep = tmpstep * temp;
if(parseInt(cormin/tmpstep)!=(cormin/tmpstep)){
if(cormin<0){
cormin = (-1) * Math.ceil(Math.abs(cormin/tmpstep))*tmpstep;
}else{
cormin = parseInt(Math.abs(cormin/tmpstep))*tmpstep;
}

}
if(parseInt(cormax/tmpstep)!=(cormax/tmpstep)){
cormax = parseInt(cormax/tmpstep+1)*tmpstep;
}
tmpnumber = (cormax-cormin)/tmpstep;
if(tmpnumber<cornumber){
extranumber = cornumber - tmpnumber;
tmpnumber = cornumber;
if(extranumber%2 == 0){
cormax = cormax + tmpstep*parseInt(extranumber/2);
}else{
cormax = cormax + tmpstep*parseInt(extranumber/2+1);
}
cormin = cormin - tmpstep*parseInt(extranumber/2);
}
cornumber = tmpnumber;
return [cormax,cormin,cornumber];
}

                                ---------------文章摘抄于《坐标轴刻度的规范化标定处理》

转自:http://blog.sciencenet.cn/blog-548663-710759.html

数据作图时,纵横坐标轴刻度范围及刻度值的取法,很大程度上取决于数据的分布。对某一组数据,我们很容易就能知道如何选取这些值才能使图画得漂亮。但是要想找到一个通用的算法,用以对任意分布的数据决定这些值,并不是一件容易的事。下面是我在网上找到的一些作法,权作备份。

●    一篇论文,提出了一种稍嫌复杂,但效果很好的方法,并与目前常用的几种方法作了对比。学院派的典型解决模式:
An Extension of Wilkinson’s Algorithm for Positioning Tick Labels on Axes
http://vis.stanford.edu/papers/tick-labels

●    最早或许也是最简单的一种解决方法。工程师的解决模式,源码:
Heckbert算法,Graphics Gems 1
http://tog.acm.org/resources/GraphicsGems/gems/Label.c

●    中国程序员的解决方案:
求算法:图表控件,如何确定坐标轴的范围和刻度?
http://bbs.csdn.net/topics/340165746

http://yun.baidu.com/xcloud/csdn/pan/share/link?shareid=2328597457&uk=1127608729

曲线坐标轴范围及刻度的自适应算法综述相关推荐

  1. 坐标轴刻度取值算法-基于魔数数组-源于echarts的y轴刻度计算需求

    数值型坐标轴刻度计算算法 前言 算法描述 上代码 代码运行效果 ts版本(2021/3/10补充) 结语 前言 因实习的公司是做大数据的,而我的工作刚好又是需要绘制一些数据图表的.绘制图表有许多现成的 ...

  2. 小瓜讲matplotlib高级篇——坐标轴设置(坐标轴居中、坐标轴箭头、刻度设置、标识设置)

    文章目录 问题 解决方案 代码附录 文章导引列表: 机器学习 数据分析 数据可视化 问题 我们在用matplotlib绘制图的时候总是有各种需求,比如下图为matplotlib默认设置画的正弦图 但是 ...

  3. 陕西中际现代:基于自适应算法的PLC滴灌控制系统

    基于自适应算法的PLC滴灌控制系统 陕西中际现代包装科技有限公司滴灌部 1.介绍 水资源正在成为一种珍贵的资源.城镇的市民使用成千上万立方的水来浇灌花园和绿地.他们依赖于使用固定灌溉计划的控制器.而这 ...

  4. 基于自适应算法和增量式PID算法的模拟直升飞机控制系统

    基于自适应算法和增量式PID算法的模拟直升飞机控制系统 文章目录 基于自适应算法和增量式PID算法的模拟直升飞机控制系统 控制系统硬件 单片机系统 传感器系统介绍 直升机模拟系统介绍 系统模块介绍 A ...

  5. 基于曲线自适应和模拟退火的蝗虫优化算法-附代码

    基于曲线自适应和模拟退火的蝗虫优化算法 文章目录 基于曲线自适应和模拟退火的蝗虫优化算法 1.蝗虫优化算法 2. 基于曲线自适应和模拟退火的蝗虫优化算法(SA-CAGOA) 2.1 基于曲线自适应的蝗 ...

  6. 【智能优化算法】基于曲线自适应和模拟退火的蝗虫优化算法求解单目标优化问题附matlab代码

    1 简介 针对蝗虫优化算法容易陷入局部极值点,收敛速度慢,精度较差等缺点,提出曲线自适应和模拟退火蝗虫优化算法.首先,引入曲线自适应代替蝗虫优化算法关键参数的线性自适应,提高了算法的全局搜索能力;其次 ...

  7. python 坐标轴刻度_给妹子讲python-S02E08坐标轴与主次刻度

    微信公众号: python数据科学家 [要点抢先看] 1.剖析plt和坐标轴对象ax的关系 2.主刻度与次刻度的概念 3.格式生成器与定位器的概念 4.数值型主次刻度与自定义格式生成器函数举例 5.日 ...

  8. 域对抗自适应算法的设计、不足与改进(Domain Adversarial Learning)

    ©作者 | 江俊广 单位 | 清华大学 研究方向 | 迁移学习 本文主要介绍域自适应(Domain Adaptation)中的对抗域自适应方法(Domain Adversarial Learning) ...

  9. webrtc中的带宽自适应算法

    webrtc中的带宽自适应算法分为两种: 1, 发端带宽控制, 原理是由rtcp中的丢包统计来动态的增加或减少带宽,在减少带宽时使用TFRC算法来增加平滑度. 2, 收端带宽估算, 原理是并由收到rt ...

最新文章

  1. 计算机考研逻辑学,管综专硕:走出不考逻辑学专业知识的误区
  2. (转)MySQL 服务器内存使用
  3. 网络时间服务和chrony
  4. discuz admin.php无法登录,discuz搬家管理员无法登录后台解决方法
  5. python用pandas读取excel_使用Pandas或其他模块在Python中读取没有隐藏列的Excel文件...
  6. SylixOS内存错误排查方法
  7. 8.SOA架构:服务和微服务分析及设计--- Web服务及REST服务的服务API与契约版本控制
  8. 抽象代数之幂零群的两种等价表示即上中心列和下中心列
  9. 【微机原理与接口技术】学习笔记9 DMA控制器8237A
  10. 头条面试题:判断一个数是否是happy number(每一位的平方和最终为1)
  11. 中小学生安全专用手机
  12. 大数据平台之今日头条采集,今日特卖全自动发布,淘宝达人有好货一键上传
  13. 【数据结构篇03】栈和队列
  14. 圆拟合Taubin fit 方法
  15. pair用法(给元素赋值)
  16. 计算机基础数据表示实验,2018大学计算机基础上机实验报告
  17. tableau数据分析及可视化——(电影票房以及酒店价格分析)(内含 tableau项目分析的十几种数据源)
  18. 提问的智慧【原文翻译】
  19. 最小二乘法实现椭圆拟合
  20. 分治法与蛮力法求最近点对问题(分治法时间复杂度O(nlogn))

热门文章

  1. 倒计时工具类:PYContDownManager
  2. 精美简历生成器(Nice_Resume_Builder)
  3. excel如何快速制作柱状图
  4. /dev/random和/dev/urandom
  5. 使用成功路径实现数据库状态回传
  6. 【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章
  7. 震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒
  8. 心灵驿站——洗尽铅华
  9. 3年经验双非进oppo ,分享心得与面试技巧
  10. MS2108 RGB to USB是一款数字视频和音频采集芯片,内部集成USB 2 0 Device控制器、数据收发模块、数字视频输入处理模块、I2S输入处理模块、音视频处理