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

问题描述 投票:5回答:2

我正在使用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;
            });

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

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

即类似:

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

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

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

javascript d3.js crossfilter dc.js
2个回答
1
投票

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

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

类似于解释here,只是用于饼图,而不是条形图。


0
投票

我知道这个问题已经七岁了。我一直在快速审查最受欢迎的交叉滤波器问题,这是第4个问题。(是的,我很拖延。)

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.