gpt4 book ai didi

时间/日期轴的漂亮图形标签的算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:36 31 4
gpt4 key购买 nike

我正在寻找一种“漂亮的数字”算法来确定日期/时间值轴上的标签。我熟悉 Paul Heckbert's Nice Numbers algorithm .

我有一个在 X 轴上显示时间/日期的图,用户可以放大并查看较小的时间范围。我正在寻找一种算法来选择合适的日期显示在刻度上。

例如:

  • 展望一天左右:1/1 12:00、1/1 4:00、1/1 8:00...
  • 展望一周:1/1、1/2、1/3...
  • 查看月份:1/09、2/09、3/09...

nice label ticks 不需要对应第一个可见点,但要接近它。

有人熟悉这样的算法吗?

最佳答案

您链接到的“漂亮数字”文章提到了这一点

the nicest numbers in decimal are 1, 2, 5 and all power-of-10 multiples of these numbers

因此,我认为要对日期/时间做一些类似的事情,您需要从类似地分解码件开始。因此,请考虑每种类型间隔的优点:

  • 如果要显示秒或分钟,请使用 1、2、3、5、10、15、30(我跳过了 6、12、15、20,因为它们“感觉”不对)。
  • 如果要显示小时,请使用 1、2、3、4、6、8、12
  • 第 1、2、7 天使用
  • 几周使用 1、2、4(13 和 26 符合模型但对我来说太奇怪了)
  • 月份使用 1、2、3、4、6
  • 多年来使用 1、2、5 和 10 的幂数

现在很明显,当你进入更大的数量时,这就开始崩溃了。当然,您不想显示 5 周的分钟数,即使是在 30 分钟左右的“漂亮”间隔内。另一方面,当您只有 48 小时的时间时,您不想显示 1 天的时间间隔。正如您已经指出的那样,诀窍是找到合适的过渡点。

凭直觉,我会说合理的交叉点大约是下一个间隔的两倍。这将为您提供以下内容(之后显示的最小和最大间隔数)

  • 如果您的时间少于 2 分钟,则使用秒数 (1-120)
  • 如果您的时间少于 2 小时,请使用分钟数 (2-120)
  • 如果您的时间少于 2 天,则使用小时数 (2-48)
  • 如果您的时间少于 2 周,则使用天数 (2-14)
  • 如果您的时间少于 2 个月 (2-8/9),则使用周数
  • 如果您的工作时间少于 2 年 (2-24),则使用月数
  • 否则使用年(尽管如果您的范围可以那么长,您可以继续使用几十年、几个世纪等)

不幸的是,我们不一致的时间间隔意味着您最终会遇到一些可能有超过 100 个间隔的情况,而其他情况最多只有 8 或 9 个。最多有超过 10-15 个间隔(或少于 5 个)。此外,如果您认为它易于跟踪,则可以打破 2 倍下一个最大间隔的严格定义。例如,您可以使用最多 3 天(72 小时)的小时数和最多 4 个月的周数。可能需要进行一些试验和错误。

所以回到过去,根据您的范围大小选择间隔类型,然后通过选择一个“不错”的数字来选择间隔大小,这会给您留下 5 到大约 15 个刻度线。或者,如果您知道和/或可以控制刻度线之间的实际像素数,您可以对刻度线之间可接受的像素数设置上限和下限(如果它们间隔太远,则图形可能难以阅读,但如果刻度太多,图表会变得困惑,您的标签可能会重叠)。

关于时间/日期轴的漂亮图形标签的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419194/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com