给定数据范围,需要巧妙的算法来计算图轴刻度的粒度

时间:2012-11-15 19:02:46

标签: algorithm

情景:

绘制图表。具有从A到B的数据点,并且想要确定用于绘制轴刻度的粒度。例如,对于134到151,比例可能从130到155,以十进制系统中的“圆”数开始和结束。但数字可能从134.31到134.35,在这种情况下,从130到135的比例将(在视觉上)压缩数据中的“重要性” - 将比例从134提取到135或者甚至可能更好134.3至134.4。数据值可能会从0.013431到0.013435,或从1343100到1343500。

因此,我试图找出一种优雅的方法来计算“粒度”,将下限向下舍入到上限,并生成一个“令人愉悦”的图表。人们可能会以某种方式对其进行“破解”,但这并不能确保“奇怪”案件得到妥善处理。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

只是一个想法:

  1. 在您的范围内添加约10%,根据经验调整此数字
  2. 将范围大小除以您想要的刻度标记数
  3. 取该数字的基数10对数
  4. 将结果乘以3,然后舍入到最接近的整数
  5. 模3的余数将告诉您是否希望最小有效小数以1步,2步或5步变化
  6. 整数除以3的结果将告诉您十次使用的力量
  7. 根据刚刚计算的蜱频率,取(扩展)范围并计算其包含的极值蜱点
  8. 确保所有数据点实际位于该范围内,如果不是,则添加刻度
  9. 如果需要,通过将上面的整数减少一个
  10. 来添加次要刻度

答案 1 :(得分:0)

我发现了一个非常有用的calculation,它与excel图表的轴刻度非常相似:

enter image description here

它是为excel编写的,但我使用并将其转换为Objective-c代码以设置我的图形轴。