这来自之前的类似问题:
图上"漂亮"网格线间隔的算法
我用一种蛮力方法做到了这一点.首先,计算出可以放入空间的最大刻度标记数.将总值范围除以刻度数; 这是 刻度线的最小间距.现在计算对数基数10的底数以得到刻度的大小,并除以该值.你应该得到1到10范围内的东西.只需选择大于或等于该值的圆数,然后乘以前面计算的对数.这是你的最终刻度线间距.
Python中的示例:
import math def BestTick(largest, mostticks): minimum = largest / mostticks magnitude = 10 ** math.floor(math.log(minimum) / math.log(10)) residual = minimum / magnitude if residual > 5: tick = 10 * magnitude elif residual > 2: tick = 5 * magnitude elif residual > 1: tick = 2 * magnitude else: tick = magnitude return tick