一尘不染

最小刻度的图表的尼斯标签算法

algorithm

我需要手动计算图表的Ticklabels和Tickrange。

我知道不错的“标准”算法(请参阅http://books.google.de/books?id=fvA7zLEFWZgC&pg=PA61&lpg=PA61&redir_esc=y#v=onepage&q&f=false),并且我也知道此Java实现

问题在于,使用这种算法,刻度线“太聪明了”。这意味着,算法决定应显示多少滴答声。我的要求是,总是有5个刻度,但是这些刻度当然应该是“漂亮的”。天真的方法是获得最大值,除以5,再乘以滴答数。当然,这里的值不是最佳值,刻度线非常难看。

有人知道该问题的解决方案或对正式算法的描述有所提示吗?


阅读 214

收藏
2020-07-28

共1个答案

一尘不染

您应该能够对Java实现进行较小的更正。

将maxticks更改为5。

将计算方法更改为此:

private void calculate() {
        this.range = niceNum(maxPoint - minPoint, false);
        this.tickSpacing = niceNum(range / (maxTicks - 1), true);
        this.niceMin =
            Math.floor(minPoint / tickSpacing) * tickSpacing;
        this.niceMax = this.niceMin + tickSpacing * (maxticks - 1); // Always display maxticks
    }

免责声明:请注意,我尚未对此进行测试,因此您可能需要对其进行调整以使其看起来不错。我建议的解决方案在图表顶部增加了额外的空间,以便始终为5个刻度线腾出空间。在某些情况下,这可能很难看。

2020-07-28