我有一组日期数据。我应该提供 X 轴值什么值?如何让 Rickshaw 将 X 数据值显示为日期?
我查看了文档和示例,但找不到任何东西。
我刚刚开始使用 Rickshaw 并且处于确切的情况。
但是,在我进一步讨论之前,Rickshaw 文档几乎不存在,这非常令人沮丧,因为与其他 JS 图形库相比,Rickshaw 的性能非常出色。
查找示例的最佳方法是深入研究其 github 页面上的源代码和示例代码,尝试理解事物(而不是文档应有的方式)。
话虽如此,让我们尝试在 StackOverflow 上建立一个强大的问题/答案基础!
所以,回到问题 :) 看起来你已经找到了自己的解决方案,但我也会提供我的解决方案。
Rickshaw.Graph.Axis.Time
我没有使用 ,而是使用Rickshaw.Graph.Axis.X
并相应地设置了tickFormat
。
var data = [ { x: TIME_SINCE_EPOCH_IN_SECONDS, y: VALUE },
{ x: NEXT_TIME_SINCE_EPOCH_IN_SECONDS, y: NEXT_VALUE } ]
var xAxis = new Rickshaw.Graph.Axis.X({
graph: graph,
tickFormat: function(x){
return new Date(x * 1000).toLocaleTimeString();
}
})
xAxis.render();
toLocaleTimeString()可以是任何 Javascript 日期函数,例如toLocaleString()、toLocaleDateString()、toTimeString()或toUTCString()。显然,因为tickFormat将函数作为参数,所以可以提供自己的格式化程序。
Koliber,如果您也可以提供更多详细信息,我很想了解您的答案。
除了 Lars 的回复,我发现默认情况下 Rickshaw 正在调用
.toUTCString(x.value*1000) //(just ctrl+F to find where =) ).
就我而言,出于这个原因,我在 Graphite 和 Rickshaw 之间的 X 上看到了不同的时间标签,一旦我将其更改为
.toLocaleString(x.value*1000).
另外,您可能需要在两个地方进行修改:Rickshaw.Graph.Axis.Time 和 ...HoverDetails
我终于发现 X 轴值应该是纪元时间值。然后,使用示例中的代码,我能够显示适当的时间尺度。
我仍然有一个问题,因为我想在 X 轴上显示星期的刻度线。但是,将 timeUnit 设置为 'week' 会导致 JavaScript 错误。但它适用于其他时间单位。
这些都不适合我。使用 angularjs 的方法是:
'x' : d3.time.format.iso.parse(date).getTime(), 'y' : 10