从饼图的交叉滤波器维度返回多个值

时间:2013-06-10 14:04:08

标签: javascript d3.js crossfilter dc.js

我正在使用dc.js来显示饼图。我在饼图中看到的所有示例都包含返回单个值的crossfilter维度

var quarter = ndx.dimension(function (d) {
                var month = d.dd.getMonth();
                if (month <= 3)
                    return "Q1";
                else if (month > 3 && month <= 5)
                    return "Q2";
                else if (month > 5 && month <= 7)
                    return "Q3";
                else
                    return "Q4";
            });
            var quarterGroup = quarter.group().reduceSum(function (d) {
                return d.volume;
            });

得到的饼图将包含4个可能的值Q1,Q2,Q3和Q4。

我需要一个饼图,显示一个返回多个值的维度。例如,用户可以在属性内的一系列主题。在饼图中,我需要显示所有可能的主题,这意味着我需要返回数组中的所有主题。

即类似:

var subjects = ndx.dimension(function (d) {
           return d.subjectArray
        });
       var subjectGroup = subjects.group()

但是这不会起作用,因为它会分割饼图以显示所有不同类型的arraylist而不是它们的内容。

我已经在这个问题上工作了一段时间,但无法找到解决方案。甚至可以用dc.js和crossfilter来做到这一点吗?

2 个答案:

答案 0 :(得分:2)

我知道这个问题已经七岁了。我一直在快速审查最流行的未解决交叉过滤器问题,这是第4条。

标记尺寸或Dimensions with Arrays是在Crossfilter 1.4.0中实现的,并在后续版本中进行了错误修复。

声明尺寸时,传递true作为可选的第二个参数,然后让尺寸键函数返回一个数组(如问题所示)。每条记录的每个键都会被计数一次。

警告:由于行的计数不止一次,因此不要在期望值总计为100%的任何地方(例如pie chart)使用这种尺寸。

答案 1 :(得分:0)

不是专家,但我认为您需要在组中使用.reduce()并创建自己的reduceAdd,reduceRemove和reduceInitial函数。

.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value();

像解释here一样,除了它是饼图,而不是条形图。