一尘不染

在图形上“很好”的网格线间隔的算法

algorithm

我需要一种合理的智能算法来为图形(图表)提供“不错”的网格线。

例如,假设条形图的值分别为10、30、72和60。您知道:

最小值:10最大值:72范围:62

第一个问题是:您从什么开始?在这种情况下,0是直观的值,但这在其他数据集上不成立,因此我猜测:

网格最小值应为0或比范围内数据的最小值低的“ nice”值。或者,可以指定它。

网格最大值应该是该范围内的最大值之上的“ nice”值。或者,可以指定它(例如,如果要显示百分比,则可能需要0到100,而不考虑实际值)。

应该指定该范围内的网格线(刻度)的数量,或者指定给定范围内的网格线的数量(例如3-8),以使这些值为“
nice”(即,整数),并最大限度地利用图表区域。在我们的示例中,80是一个明智的最大值,因为它将使用图表高度的90%(72/80),而100将创建更多的浪费空间。

有人知道一个好的算法吗?语言无关紧要,因为我将按需要实现语言。


阅读 258

收藏
2020-07-28

共1个答案

一尘不染

CPAN 在此处提供了一个实现(请参见源链接)

仅供参考,并附上您的示例数据:

  • 枫木:最小值= 8,最大值= 74,标签= 10,20,..,60,70,刻度= 10,12,14,.. 70,72
  • MATLAB:最小值= 10,最大值= 80,标签= 10,20,..,60,80
2020-07-28