使用DC.js(crossfilter和d3便利库)时遇到问题 - 条形图没有显示值

ebo*_*yen 4 javascript d3.js crossfilter dc.js

我正在使用这个库:Dimensional Charting来构建一些需要CrossFilter功能的相对标准的图表.

我一直在关注这些例子,但他们并不适合我.

这是我的代码:

var dashData = crossfilter(data.report),
dataByHour = dashData.dimension(function(d){ return d3.time.hour(new Date(d.timestamp))}),
totalByHour = dataByHour.group().reduceSum(function(d) { return d.amount }),

dc.barChart("#graphTimeOverview")
    .width(990) // (optional) define chart width, :default = 200
    .height(250) // (optional) define chart height, :default = 200
    .transitionDuration(500) // (optional) define chart transition duration, :default = 500
    .margins({top: 10, right: 50, bottom: 30, left: 40})
    .dimension(dataByHour) // set dimension
    .group(totalByHour) // set group
    .elasticY(true)
    .centerBar(true)
    .gap(1)
    .x(d3.time.scale().domain([new Date(data.report[0].timestamp), new Date(data.report[(data.report.length - 1)].timestamp)]))
    .round(d3.time.hour.round)
    .xUnits(d3.time.hours)
    .renderHorizontalGridLines(true);

dc.renderAll();
Run Code Online (Sandbox Code Playgroud)

我知道crossfilter数据工作正常,这是一个组的示例:

totalByHour:

[ {key:(new Date(1361746800000)), value:6170.17},
  {key:(new Date(1361678400000)), value:3003},
  {key:(new Date(1361581200000)), value:2350.42}, 
  {key:(new Date(1361667600000)), value:1636.19},
    etc... 
]
Run Code Online (Sandbox Code Playgroud)

不幸的是,这一切都让我得到了一个空图,似乎正确地计算了y轴,所以在我看来它可以读取数据,但是我从来没有看到任何条形值:

在此输入图像描述

Pab*_*rro 5

也许data.report数组没有按时间戳排序(提供的样本是未排序的).在您的代码中,您假设这些值已排序.你可以尝试使用

// Compute the timestamp extent
var timeExtent = d3.extent(data.report, function(d) { return d.timestamp; });

dc.barChart("#graphTimeOverview")
    // more settings here
    .x(d3.time.scale().domain(timeExtent.map(function(d) { return new Date(d); })))
    .round(d3.time.hour.round)
    .xUnits(d3.time.hours)
    .renderHorizontalGridLines(true);
Run Code Online (Sandbox Code Playgroud)

如果你提供一个jsFiddle,会更容易分辨出问题所在.