我需要一个相当聪明的算法来为图形(图表)提出"漂亮"的网格线.
例如,假设条形图的值为10,30,72和60.您知道:
最小值:10最大值:72范围:62
第一个问题是:你从什么开始?在这种情况下,0将是直观的值,但这不会阻碍其他数据集,所以我猜:
网格最小值应为0或低于范围内数据最小值的"nice"值.或者,可以指定.
网格最大值应该是该范围内最大值之上的"漂亮"值.或者,可以指定它(例如,如果显示百分比,则可能需要0到100,而不管实际值如何).
应该指定范围内的网格线(刻度线)的数量或给定范围内的数字(例如3-8),使得值"好"(即圆数)并且最大化图表区域的使用.在我们的例子中,80将是一个合理的最大值,因为它将使用90%的图表高度(72/80),而100将产生更多的浪费空间.
有人知道这个算法很好吗?语言是无关紧要的,因为我将按照我的需要实现它.
我正在寻找一种在轴上放置刻度线的算法,给定要显示的范围,显示它的宽度,以及测量刻度线的字符串宽度的功能.
例如,假设我需要在1e-6和5e-6之间显示以及以像素显示的宽度,算法将确定我应该将标记(例如)放在1e-6,2e-6,3e-6处,4e-6和5e-6.给定较小的宽度,可以确定最佳放置仅在偶数位置,即2e-6和4e-6(因为放置更多的标记将导致它们重叠).
智能算法将优先考虑10,5和2的倍数的标记.此外,智能算法将在零附近对称.