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

Tra*_*vis 5 javascript d3.js crossfilter dc.js

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

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;
            });
Run Code Online (Sandbox Code Playgroud)

生成的饼图将包含 4 个可能的值 Q1、Q2、Q3 和 Q4。

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

即类似的东西:

var subjects = ndx.dimension(function (d) {
           return d.subjectArray
        });
       var subjectGroup = subjects.group()
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为它会拆分饼图以显示所有不同类型的数组列表,而不是按其内容显示。

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

sta*_*One 1

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

.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value();
Run Code Online (Sandbox Code Playgroud)

就像这里解释的那样,除了它是饼图,而不是条形图。