- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找一种“漂亮的数字”算法来确定日期/时间值轴上的标签。我熟悉 Paul Heckbert's Nice Numbers algorithm .
我有一个在 X 轴上显示时间/日期的图,用户可以放大并查看较小的时间范围。我正在寻找一种算法来选择合适的日期显示在刻度上。
例如:
nice label ticks 不需要对应第一个可见点,但要接近它。
有人熟悉这样的算法吗?
最佳答案
您链接到的“漂亮数字”文章提到了这一点
the nicest numbers in decimal are 1, 2, 5 and all power-of-10 multiples of these numbers
因此,我认为要对日期/时间做一些类似的事情,您需要从类似地分解码件开始。因此,请考虑每种类型间隔的优点:
现在很明显,当你进入更大的数量时,这就开始崩溃了。当然,您不想显示 5 周的分钟数,即使是在 30 分钟左右的“漂亮”间隔内。另一方面,当您只有 48 小时的时间时,您不想显示 1 天的时间间隔。正如您已经指出的那样,诀窍是找到合适的过渡点。
凭直觉,我会说合理的交叉点大约是下一个间隔的两倍。这将为您提供以下内容(之后显示的最小和最大间隔数)
不幸的是,我们不一致的时间间隔意味着您最终会遇到一些可能有超过 100 个间隔的情况,而其他情况最多只有 8 或 9 个。最多有超过 10-15 个间隔(或少于 5 个)。此外,如果您认为它易于跟踪,则可以打破 2 倍下一个最大间隔的严格定义。例如,您可以使用最多 3 天(72 小时)的小时数和最多 4 个月的周数。可能需要进行一些试验和错误。
所以回到过去,根据您的范围大小选择间隔类型,然后通过选择一个“不错”的数字来选择间隔大小,这会给您留下 5 到大约 15 个刻度线。或者,如果您知道和/或可以控制刻度线之间的实际像素数,您可以对刻度线之间可接受的像素数设置上限和下限(如果它们间隔太远,则图形可能难以阅读,但如果刻度太多,图表会变得困惑,您的标签可能会重叠)。
关于时间/日期轴的漂亮图形标签的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419194/
在通过REST Request Body方法发出搜索请求时,例如 GET /bank/_search { "query": { "match_all": {} }, "sort": [
有没有办法检测用户是否停止滑动?也许 bij 鼠标输入检查之类的。我尝试在 onSliderChange 事件中使用鼠标 isButton0Release 和 hasFocus 来检查用户是否停止滑动
(来源:google.com) 最近,我发现我的应用程序中显示的汉字相当难看。 我想我应该让它们“消除锯齿”。但是,我如何在 Java 中做到这一点? 仅供引用,我没有明确选择要在 GUI 应用程序中
我正在创建一个网站,根据某些条件(即是否登录、是否填写表格等),不同页面的外观可能会有很大差异。这使得需要在不同的时间输出不同的html block 。 但是,这样做会使我的 php 代码看起来很糟糕
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
如果我有一个类包含例如几个将用向量填充的槽,那么问题通常会出现。如果我想让这个类的对象或多或少透明,我会为它实现 print-object。在这里我遇到了问题: 如果我在一行中打印所有内容,REPL
我有一个允许上传到我网站的文件扩展名列表。 我用 jQuery Validation plugin 检查它们. 如果他们选择了不受支持的扩展程序,我会显示一条错误消息。 看起来像 var msg =
在一个本身嵌套在一个或多个父数组/结构/union 中的数组/结构/union 中读取多个数字/字符串的最佳方法是什么? 没有临时变量的第一个例子: printf("%d %d\n", a[9][3]
我是 AngularJS 的新手。我目前在为我的观点编写漂亮的 url 时遇到问题。我已经设置了 $locationProvider.html5Mode(true);删除 #从地址栏中显示的网址。但是
我有一个带有 ElasticSearch 的自动完成 jquery 功能。输入第一个字母时出现以下错误。 跨源请求被阻止:同源策略不允许读取 http://localhost:9200/test12/
我是一名优秀的程序员,十分优秀!