dc.js 一维以上的堆叠折线图

dc.js stacked line chart with more than 1 dimension

我的数据集是 json 之类的数组:

var data = [ { company: "A", date_round_1: "21/05/2002", round_1: 5, date_round_2: "21/05/2004", round_2: 20 },
             ...
             { company: "Z", date_round_1: "16/01/2004", round_1: 10, date_round_2: "20/12/2006", round_2: 45 }] 

并且我希望将 'round_1' 和 'round_2' 时间序列显示为堆叠折线图。

基线看起来像这样:

var fundsChart = dc.lineChart("#fundsChart");

var ndx = crossfilter(data);
var all = ndx.groupAll();

var date_1 = ndx.dimension(function(d){
  return d3.time.year(d.date_round_1);
})

fundsChart
  .renderArea(true)
  .renderHorizontalGridLines(true)
  .width(400)
  .height(360)
  .dimension(date_1)
  .group(date_1.group().reduceSum(function(d) { return +d.round_1 }))
  .x(d3.time.scale().domain([new Date(2000, 0, 1), new Date(2015, 0, 1)]))

我试过使用堆栈方法添加系列,但问题在于,只有一个维度可以作为 lineChart 的参数传递。

您能想出一个方法来显示两个系列,同时仍然使用 dc 图吗?

您要在此图表上进行过滤吗?如果没有,只需在 date_2 维度上创建一个不同的组并在堆栈中使用它。应该可以。

如果您要进行过滤,我认为您必须稍微更改一下数据模型。您需要切换为每轮有 1 条记录,因此在这种情况下,您现在拥有的每 1 条记录都会有 2 条记录。应该有 1 个日期 属性(该回合的日期),一个金额 属性(当前结构中 round_x 的内容)和一个 'round' 属性(例如“1”或“2”)。

然后您需要创建一个日期维度和该维度上的多个组。该组将有一个类似于以下内容的 reduceSum 函数:

var round1Group = dateDim.group().reduceSum(function(d) {
  return d.round === '1' ? d.amount : 0;
});

所以,这里发生的是,我们有一个组,它只会汇总第 1 轮的值。您将为第 2 轮创建类似的组,依此类推。然后将这些组堆叠在 dc.js 图表中。

希望对您有所帮助!