D3.js 如何在dc.js中确定维度和组?

D3.js 如何在dc.js中确定维度和组?,d3.js,dc.js,crossfilter,D3.js,Dc.js,Crossfilter,我不熟悉dc.js,在确定维度和组时面临问题。我有这样的数据 this.data = [ {Type:'Type1', Day:1, Count: 20}, {Type:'Type2', Day:1, Count: 10}, {Type:'Type1', Day:2, Count: 30}, {Type:'Type2', Day:2, Count: 10} ] 我必须显示两个折线图的合成图,一个用于Type1,另一个用于Type2。我的x轴将是白天。所以我的一个

我不熟悉
dc.js
,在确定维度和组时面临问题。我有这样的数据

this.data = [
    {Type:'Type1', Day:1, Count: 20},
    {Type:'Type2', Day:1, Count: 10},
    {Type:'Type1', Day:2, Count: 30},
    {Type:'Type2', Day:2, Count: 10}
]
我必须显示两个折线图的合成图,一个用于Type1,另一个用于Type2。我的x轴将是白天。所以我的一个维度将是白天

var ndx = crossfilter(this.data);
var dayDim = ndx.dimension(function(d) { return d.Day; }) 

如何进行分组?如果我计数的话,某一天的总计数就会显示出来,这是我不想要的

您的问题并不完全清楚,但听起来您想同时按
类型
日期

一种方法是使用组合键:

var typeDayDimension = ndx.dimension(function(d) {return [d.Type, d.Day]; }),
    typeDayGroup = typeDayDimension.group().reduceSum(function(d) { return d.Count; });
然后,您可以使用系列图表在复合图表中生成两个折线图

var chart = dc.seriesChart("#test");
chart
    .width(768)
    .height(480)
    .chart(function(c) { return dc.lineChart(c); })
    // ...
    .dimension(typeDayDimension)
    .group(typeDayGroup)
    .seriesAccessor(function(d) {return d.key[0];})
    .keyAccessor(function(d) {return +d.key[1];}) // convert to number
    // ...

有关更多详细信息,请参阅。

尽管Gordon建议的方法非常有效,但如果您希望使用合成图获得相同的结果,则可以使用该方法

下面是一个例子:

引述:

系列图表只是一个复合图表,具有自动拆分数据和生成子图表的功能


你的解决方案对我来说很有效,但是我们可以通过在一个合成图中创建两个折线图来实现吗?这就是它在引擎盖下所做的-序列图只是一个具有自动拆分数据和生成子图表的合成图。如果你想手动操作,有很多方法。。。太多了。你的目标是什么?实际上,我正在创建一个用于创建折线图的通用方法,所以每次我都会将数据、维度数组和组数组传递给该方法,它将在图表中创建相同数量的线。这在复合图中是可能的,因为它期望在
组合中使用数组,我已经完成了这部分。我无法实现的是如何在“Day”中创建嵌套的“Type”分组。我知道我可以使用
.reduce
来实现这一点,但不确定如何将其用于嵌套分组。没关系,我自己解决了这个问题。非常感谢你的帮助。太棒了!是的,自定义reduce函数可能是最简单的方法,尽管系列图表使用的组合键方法也被称为。很高兴你明白了。
function reduceAdd(p, v) {
  if (v.Type === "Type1") {
    p.docCount += v.Count;
  } 
  return p;
}

function reduceRemove(p, v) {
  if (v.Type === "Type1") {
    p.docCount -= v.Count;
  } 
  return p;
}

function reduceInitial() {
  return { docCount: 0 };
}