gpt4 book ai didi

javascript - 将整数集分割成图表轴标签的最佳算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:09 24 4
gpt4 key购买 nike

假设您获取从 0 到 1,000,000,000 的任何值,并且您想要绘制 30 天。所以一个特定的图表可能有一组像:

[ 1, 465, 123, 9, ... ]

虽然另一个图表可以有一个更大数字的集合:

[ 761010, 418781, ... ]

是否有一种“最佳算法”可以将这些值分割成“干净”的数字?抱歉措辞不当,不知道正确的术语,我会尽力解释。

我所说的“最佳算法”指的是最小计算步骤数,因为它创建的标签(比如 y 轴)从人类的 Angular 来看是最简单的。

例如,假设您总是想将 y 轴分成 5 个标签。你可以这样做:

var max = Math.max.apply(Math, values); // 465 (from the first set of values)
var interval = max / 5;
var labels = [ interval * 0, interval * 1, interval * 2, ... ];

但这会创建如下标签:

[ 0, 93, 186, ... ]

这对人类来说理解起来会很复杂。更好的(但仍然不理想)是创建如下标签:

[ 0, 125, 250, 375, 500 ]

但这仍然是具体的。它应该以某种方式弄清楚更好的分割是:

[ 0, 200, 400, 600, 800 ]

这样,它就被分成了更直观的 block 。

有解决这个问题的标准方法吗?哪种算法效果最好?

最佳答案

一些数学

var getLabelWidth = function(sep, max_value){

var l = (""+max_value).length;

var av = max_value/sep/Math.pow(10,l-2); // get the length max 2 digit
/// 15.22

var width = (Math.ceil(av)*Math.pow(10,l-2)); // do a ceil on the value retrieved
// and apply it to the width of max_value.
// 16 * 10 000
return width;
}
console.log(getLabelWidth(2,59)); // 30 : [0, 30, 60]

console.log(getLabelWidth(2,100)); // 50 : [0, 50, 100]
console.log(getLabelWidth(2,968)); // 490 : [0, 490, 980]

console.log(getLabelWidth(3,368)); // 130 : [0, 130, 260, 390]
console.log(getLabelWidth(3,859)); // 290 : [0, 290, 580, 870]
console.log(getLabelWidth(3,175)); // 60 : [0, 60, 120, 180]
console.log(getLabelWidth(3,580)); // 200 : [0, 200, 400, 600]
console.log(getLabelWidth(3,74)); // 25 : [0, 25, 50, 75]

console.log(getLabelWidth(4,1111)); // 300 :[0, 300, 600, 900, 1200]
console.log(getLabelWidth(4,761010)); // 200 000: [0, 200000, 400000, 600000, 800000]

我想它可以改进一点,

抱歉我的英语不好。

关于javascript - 将整数集分割成图表轴标签的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28820906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com