【问题标题】:Return multiple values from a crossfilter dimension for a pie chart从饼图的交叉过滤器维度返回多个值
【发布时间】:2013-06-06 05:15:58
【问题描述】:

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

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

我一直在研究这个问题一段时间,但找不到解决方案。使用 dc.js 和 crossfilter 甚至可以做到这一点吗?

【问题讨论】:

标签: javascript d3.js crossfilter dc.js


【解决方案1】:

我知道这个问题已经有七年了。我一直在快速回顾最流行的未回答的交叉过滤问题,这是第 4 位。

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

在声明维度时,为可选的第二个参数传递true,并让维度键函数返回一个数组(如问题所示)。每条记录将针对其每个键计算一次。

警告:由于对行的计数不止一次,因此请勿在预期值加起来为 100% 的任何地方(如 pie chart)使用这种维度。

【讨论】:

    【解决方案2】:

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

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

    就像here 解释的那样,只是它是用于饼图而不是条形图。

    【讨论】:

    • 这个解决方案也是正确的,但是这个功能现在是内置的——看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2016-01-11
    • 2019-07-18
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多