使用dc.js seriesChart .seriesAccessor()来选择特定(不是全部)系列

时间:2015-06-04 16:03:59

标签: dc.js

我正在尝试显示6系列的详细数据。示例http://dc-js.github.io/dc.js/examples/scatter-series.html正是我所需要的,但我需要进行一些小调整。我想展示三个图表,每个图表有两个项目。

我可以使用示例中的单个runGroup,但不知何故限制chart.seriesAccessor()在一个图表中显示两个特定的系列。 然后在第二个图表中使用相同的runGroup并将其.seriesAccessor()更改为使用两个不同的系列等等。

设置多个单独的dims和组工作正常,但是当我已经有一个包含其中所有内容的单个交叉滤波数据集时,我不能仅使用该单个维度和组来驱动不同的图表,这似乎有点过分了。

(数据集实际上有40个系列,但是现在我只需要显示特定的数据,在几个图表中组合在一起)。

1 个答案:

答案 0 :(得分:1)

这就是Tufte称之为"小倍数"。我不确定您是否可以通过添加维度和组来实际执行此操作,因为您不希望图表受到彼此影响。选择系列过滤器。

seriesAccessor只是一个提取子密钥的函数,它实际上没有办法过滤。

看起来是"fake groups"的又一个案例。修改分散系列示例:

function filter_keys(source_group, f) {
    return {
        all:function () {
            return source_group.all().filter(function(d) {
                return f(d.key);
            });
        }
    };
}

// in particular, take experiments 1 and 2 from scatter-series.html:
var frunGroup = filter_keys(runGroup, function(k) {
    return k[0] < 3; // k[0] is the same part used for seriesAccessor
});
chart.group(frunGroup)

然后,您将为多个中的每个图表定义其中一个过滤组(或在循环中定义它们)。每当交叉过滤器发生变化时,每个图表对组进行一次过滤的成本很小,但这应该可以忽略不计。

将seriesChart概括为处理这类事情会很好,但它本质上是相同的计算/后过滤,所以我倾向于认为我们需要的是更好的数据操作/过滤工具crossfilter和dc.js,内置的功能不多。