【发布时间】:2017-01-13 01:00:07
【问题描述】:
我正在处理一张热图,我必须在地图上显示由一系列值计算出的颜色填充的区域。
我弄清楚了区域颜色部分,但我还必须显示 5 个步骤,每个步骤提供一个颜色和一个值,解释颜色的含义。
所以,假设我的最小值为 2654,最大值为 6947。 这为我提供了 5 个数字的范围,它们是:
2654
3727,25
4800,5
5873,75
6947
现在我想要将这些值显示为漂亮的间隔,如下所示:
0 - 3000
3000 - 4000
4000 - 5000
5000 - 6000
> 6000
这些值当然是动态的。 所以它可能是巨大的数字,也可能是小数字。 有没有办法做到这一点?
更新
@roberto-carlos 我在下面尝试了您的示例:
var min = 900;
var max = 12541;
var steps = 5;
var range = Enumerable.Range(0, steps).Select(i => min + (max - min) * ((double)i / (steps - 1)));
foreach (var d in range)
{
var power = Math.Floor(Math.Log10(d));
var inf = d - d % Math.Pow(10, power);
var sup = d + (Math.Pow(10, power) - d % Math.Pow(10, power));
if (d == min)
{
Console.WriteLine("0-" + sup);
}
else if (d == max)
{
Console.WriteLine(">" + sup);
}
else
{
Console.WriteLine(inf + "-" + sup);
}
}
但是,这为我提供了这样的结果:
0-1000
3000-4000
6000-7000
9000-10000
>20000
有没有办法让间隔在数字上“粘在一起”?
【问题讨论】:
-
“好”到底是什么意思?你的意思是你首先决定你想要有 5 个间隔,并且应该以它们看起来“圆润”的方式确定边界?
-
你没有任何意义。引用“最小值为 2654,最大值为 6947”,这与数字 5 没有任何关系。甚至在数字已知之前就选择了 5。那么为什么不直接使用 5 作为分段的除数。 x/5。或执行您在上面应用的逻辑。首先是最小值到第一个第十个最大值,然后是下一个的间隔除以 5。
-
总会有 5 个间隔/步长,但值的数量和这些值的范围是动态的。所以到目前为止我所做的是我根据提供的最小/最大值计算了每个步骤。我正在寻找的是将这些分成基本四舍五入到最接近的 100 或 1000 或 10000 的类别,无论数字是多少。
-
@mp1990 你能举个例子来说明数字上“粘在一起”的间隔吗?
-
@roberto-carlos 这基本上是我想要达到的目标:imgur.com/a/BUFnZ 除了数字可以比这更宽。该图像是一个范围从 0 到 x 的值的示例,用于计算其中的组。