我有一个x轴,显示我的数据发生的日期。数据是动态的,有时我只有1天,2天,n天的数据等。
以下是我在x轴上显示日期的代码:
chart.x = d3.time.scale()
.range([0, chart.w]);
chart.xAxis = d3.svg.axis()
.scale(chart.x)
.orient("bottom")
.ticks(d3.time.day) // --- TODO : this is not showing the current day, for some reason...
.tickFormat(d3.time.format("%b %-d %p"));
如果我的数据在2天(例如:星期二,星期三)传播,则仅显示第二天(星期三)的勾号,即。当一天从一个“变化”到另一个。 我想在第一天(星期二)显示勾号。 即使1天内只有数据,我仍然想要显示一个勾号。
谢谢你们,
答案 0 :(得分:2)
要扩展域以便缩放以刻度标记开始和结束,您使用.nice()
方法,如@meetamit建议的那样 - 但“nicing”仅在您调用该方法之后才有效/ em>您设置了域名,这就是您可能没有注意到任何更改的原因。 API并没有真正说清楚,尽管由于该方法改变了域名,我认为以后更改域名会覆盖先前nice()
调用的影响是有道理的。
此外,请务必使用time-scale version of the method:.nice(d3.time.day)
将域名四舍五入到最近的一天,而不是最近的一小时。
这是一个小提琴:
http://fiddle.jshell.net/4rGQq/
关键代码很简单:
xScale.domain(d3.extent(d))
//d3.extent() returns max and min of array, which become the basic domain
.nice(d3.time.day);
//nice() extends the domain to nearest start/end of a day
比较在设置域后注释.nice()
来电时会发生什么情况,即使在初始化比例期间进行了另一次.nice()
调用也是如此。还要比较如果不指定day-interval作为nice方法的参数会发生什么。
答案 1 :(得分:1)
您能说明chart.x
是如何设置的吗?很难说没有看到它,但您可以通过致电chart.x.nice()
来修复它(请参阅documentation)。
否则,您似乎需要手动检查其域的范围,并在单日情况下进行调整。
<强>澄清强>
您的代码会显示您致电range()
的方式,而不是您如何致电domain()
,这是重要的。
在我看来,如果这样做
var domain = chart.x.domain()
console.log domain[0] == domain[1]
只要数据只有一天,您就会看到true
被记录。如果是这样,则意味着您处理的是单个时间点而不是时间范围。在这种情况下,您需要将域调整为更长的范围。
真的很难知道甚至没有看到你正在做什么的图像。
答案 2 :(得分:-1)
.ticks()
应该用于设置您想要在轴上的刻度数,而不是应该包含在其中的数据类型。因此,请尝试将其设置为.ticks(3)
,并设置几个刻度
来自维基:
的 .ticks(第[count]) 强>
返回大约从比例输入域计数代表值。如果未指定count,则默认为10.返回的tick值均匀分布,具有人类可读的值(例如10的幂的倍数),并且保证在输入域的范围内。刻度通常用于显示参考线或刻度线,以及可视化数据。指定的计数只是一个提示;根据输入域,比例可能会返回更多或更少的值。