gpt4 book ai didi

algorithm - 为图表的 Y 轴选择有吸引力的线性比例

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:58 25 4
gpt4 key购买 nike

我正在编写一些代码来在我们的软件中显示条形图(或折线图)。一切顺利。让我难过的是标记 Y 轴。

来电者可以告诉我他们想要为 Y 标尺贴上多精细的标签,但我似乎对以“有吸引力”的方式给他们贴上标签的确切含义感到困惑。我无法描述“有吸引力”,您可能也无法描述,但我们一看到它就知道,对吧?

所以如果数据点是:

   15, 234, 140, 65, 90

然后用户在 Y 轴上要求 10 个标签,用纸和铅笔稍微弄弄了一下就得到了:

  0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250

所以这里有 10 个(不包括 0),最后一个刚好超过最高值(234 < 250),每个 25 是一个“不错”的增量。如果他们要求 8 个标签,则增加 30 个看起来不错:

  0, 30, 60, 90, 120, 150, 180, 210, 240

九会很棘手。也许只是使用了 8 或 10 并称其足够接近就可以了。以及当某些点为负数时怎么办?

我可以看到 Excel 很好地解决了这个问题。

有谁知道解决这个问题的通用算法(即使是一些蛮力也可以)?我不必快速完成,但它应该看起来不错。

最佳答案

很久以前,我编写了一个图形模块,很好地涵盖了这一点。在灰色 block 中挖掘得到以下内容:

  • 确定数据的下限和上限。 (当心下限 = 上限的特殊情况!
  • 将范围划分为所需的刻度数。
  • 将刻度范围四舍五入到合适的数量。
  • 相应地调整下限和上限。

让我们举个例子:

15, 234, 140, 65, 90 with 10 ticks
  1. 下限 = 15
  2. 上限 = 234
  3. 范围 = 234-15 = 219
  4. 刻度范围 = 21.9。这应该是 25.0
  5. 新的下限 = 25 * round(15/25) = 0
  6. 新上限 = 25 * round(1+235/25) = 250

所以范围 = 0,25,50,...,225,250

您可以通过以下步骤获得漂亮的刻度范围:

  1. 除以 10^x,使结果介于 0.1 和 1.0 之间(包括 0.1,不包括 1)。
  2. 相应翻译:
    • 0.1 -> 0.1
    • <= 0.2 -> 0.2
    • <= 0.25 -> 0.25
    • <= 0.3 -> 0.3
    • <= 0.4 -> 0.4
    • <= 0.5 -> 0.5
    • <= 0.6 -> 0.6
    • <= 0.7 -> 0.7
    • <= 0.75 -> 0.75
    • <= 0.8 -> 0.8
    • <= 0.9 -> 0.9
    • <= 1.0 -> 1.0
  3. 乘以 10^x。

在这种情况下,21.9 除以 10^2 得到 0.219。这是 <= 0.25,所以我们现在有 0.25。乘以 10^2 得到 25。

让我们看一下具有 8 个刻度的同一个示例:

15, 234, 140, 65, 90 with 8 ticks
  1. 下限 = 15
  2. 上限 = 234
  3. 范围 = 234-15 = 219
  4. 刻度范围 = 27.375
    1. 除以 10^2 得到 0.27375,转换为 0.3,得到(乘以 10^2)30。
  5. 新的下限 = 30 * round(15/30) = 0
  6. 新上限 = 30 * round(1+235/30) = 240

它给出了您请求的结果 ;-)。

------ 由 KD 添加 ------

这是在不使用查找表等的情况下实现此算法的代码...:

double range = ...;
int tickCount = ...;
double unroundedTickSize = range/(tickCount-1);
double x = Math.ceil(Math.log10(unroundedTickSize)-1);
double pow10x = Math.pow(10, x);
double roundedTickRange = Math.ceil(unroundedTickSize / pow10x) * pow10x;
return roundedTickRange;

一般来说,刻度数包括底部刻度,所以实际的y轴线段比刻度数少1。

关于algorithm - 为图表的 Y 轴选择有吸引力的线性比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326679/

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