计算日期时间轴最小,最大和主要次要刻度间隔

时间:2011-12-27 13:35:54

标签: algorithm datetime charts

我正在寻找一种好的算法来为自定义图表组件上的DateTime轴生成漂亮的主要/次要刻度间隔。我在这里阅读了this previous question,其中讨论了计算数字轴的主要/次要刻度和最小/最大值的好方法。但是,很难将其转换为日期轴计算。

原因是某些日期范围与其他日期范围不同,有些甚至不是一致的时间范围。考虑几分钟内的轴范围。这种计算相当简单,因为您可以使用与上述类似的算法将分钟数除以。但是,如果要求同一轴在年/月或月/周范围内显示数据,您会怎么做?

此轴的要求是它可以计算主要/次要刻度线,以便图表永远不会太杂乱,输入数据范围以毫秒为单位,直到数月和数年。它旨在用于实时图表,因此静态表示不如快速更新的能力那么重要。我的简单算法就是这样做的:

  • 如果范围> 3年,选择专业= 1年,未成年人= 3个月
  • 如果范围> 1年,选择主要= 3个月,未成年人= 1个月
  • 如果范围> 3个月,选择major = month,minor = nothing(我考虑的是一周,但是因为一个月不能整除它看起来很奇怪)
  • 如果范围> 1周,选择major = 1天,minor = nothing
  • 如果范围< 1天,根据漂亮的数字算法选择小时
  • 如果范围< 1小时,选择分钟
  • 如果范围< 1分钟,选择秒钟

等...

正如你可以看到很多if语句,可能会遗漏一些东西。在这种方法中,我经常在某些日期出现故障,我想知道是否有一种简单或常见的方法来解决这个问题。

祝你好运, 安德鲁

1 个答案:

答案 0 :(得分:2)

  1. 排序所有可能的滴答数:1秒,1分钟,1小时,1天,1个月,1年。
  2. 确定主要(min_dist_major)和次要(min_dist_minor)刻度的最小距离。这些是常量并具有像素值。
  3. 在显示器上显示时,查找大于min_dist_major的最小主刻度线。
  4. 然后在监视器上显示时,找到小于主要刻度但大于min_dist_minor的最小次刻度。如果找不到轻微的刻度,那么它就不存在了。
  5. 您可以使用其他刻度扩展数组,例如每种类型的2和5。