gpt4 book ai didi

Java - 根据最小值、最大值和计数生成间隔/间隔

转载 作者:行者123 更新时间:2023-12-01 11:20:12 32 4
gpt4 key购买 nike

我需要通过给出值数组来生成 map 上图例的值。Java 库中是否有函数可以从值数组和计数值生成范围或区间?像这样的东西:

Integer[] getIntervals(Number[] values , int count);

使用示例:

getIntervals([10, 33.5, 45.98, 62, 77,80 ], 5) 将返回 [10, 24, 38, 52, 64, 80]

这很容易自己编写,但必须巧妙地在 map 图例上显示它。我所说的智能是指生成对图例有意义的数字。我不知道如何用英语描述它,所以我附上一张屏幕截图来显示我的意思。

如果上面的函数按照我想要的方式智能,它会返回:[10, 30, 50, 70, 90] 或类似的东西。

enter image description here

这仍然是我可以自己写的东西,但也许这已经在某个地方完成了?我查看了 Apache Commons MathUtils 和 Apache Commons Math,但找不到我需要的东西。

编辑:我发现 Apache Commons 中有一个 Percentile这似乎是我需要使用的类(class),但我的数学太弱了。

最佳答案

您的问题需要解决,但我选择将其解读为“我正在尝试为一系列输入值构建间隔良好的刻度以实现可视化目的”。既然如此,我建议你长看一下how D3.js implements such scales 。是的,Javascript不是Java——但是D3.js是一个著名的可视化库,你描述的问题是一个众所周知的可视化问题,而且语法与Java足够相似,可以让你很容易地适应这些想法.

简而言之,大致翻译一下:

public interface LinearScale {
/**
* build a scale from min to max; see d3 linear.domain()
* and then expand it to make it end in nice, round numbers;
* see d3 linear.nice()
*/
void setNiceDomain(double min, double max);
/**
* set number of threshold values; see d3 linear.ticks()
* and return their values
*/
double[] setThresholdCount(int ticks);
/**
* gets the largest threshold that is <= a given value
*/
double map(double value);
}

(JS) 源代码可在 https://github.com/mbostock/d3/blob/master/src/scale/linear.js 获取。 ;选择的片段(来自linear.ticks()的实现):

function d3_scale_linearTickRange(domain, m) {
if (m == null) m = 10;

var extent = d3_scaleExtent(domain),
span = extent[1] - extent[0],
step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),
err = m / span * step;

// Filter ticks to get closer to the desired count.
if (err <= .15) step *= 10;
else if (err <= .35) step *= 5;
else if (err <= .75) step *= 2;

// Round start and stop values to step interval.
extent[0] = Math.ceil(extent[0] / step) * step;
extent[1] = Math.floor(extent[1] / step) * step + step * .5; // inclusive
extent[2] = step;
return extent;
}

function d3_scale_linearTicks(domain, m) {
return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
}

关于Java - 根据最小值、最大值和计数生成间隔/间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336959/

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