簡體   English   中英

如何使用交叉過濾器和dc.js過濾,分組和繪制數據

[英]How to filter, group and plot data using crossfilter and dc.js

我有以下數據和其計數的條形圖。 這是jsfiddle 我想過濾尺寸,以便在條形圖中只有Alyssa和Bob。 我嘗試了使用.filter()函數創建過濾變量並直接過濾圖表的各種變體。 主要問題似乎是XDimension.group().reduceCount因為顯然“組方法僅考慮滿足除此維度的過濾器之外的每個過濾器的記錄”。 我搞不清楚了。 幫助表示贊賞。

var data = [{
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "B"
}, {
    Owner: "Bob",
    ID: "A"
}, {
    Owner: "Bob",
    ID: "A"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "A"
}, {
    Owner: "Joe",
    ID: "A"
}, {
    Owner: "Joe",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "E"
}];

var ndx = crossfilter(data);


var XDimension = ndx.dimension(function (d) {
    return d.Owner;
});
var YDimension = XDimension.group().reduceCount(function (d) {
    return d.Owner;
});
dc.barChart("#Chart")
    .width(480).height(300)
    .dimension(XDimension)
    .group(YDimension)
    .centerBar(true)
    .gap(56)
    .x(d3.scale.ordinal().domain(XDimension))
    .xUnits(dc.units.ordinal)
    .xAxisLabel("Market Developer")
    .yAxisLabel("Unique Counts")
    .elasticY(true)
    .xAxis().tickFormat(function (v) {
    return v;
});
dc.renderAll();

在將數據添加到交叉過濾器之前是否可以過濾數據?

data = data.filter(function (d) { return d.Owner !== "Joe"; });
var ndx = crossfilter(data);

我目前正在研究類似的問題,這是一個臨時解決方案。 我試過像這樣過濾維度:

var filtered = XDimension.filter(function (d) { return d !== "Joe"; });
var YDimension = filtered.group().reduceCount(function (d) { return d.Owner });

當我打印出“已過濾”時,我看到尺寸已正確過濾。 但是,繪制圖表時,“ Joe”仍在數據集中。

如果我找到更好的解決方案,請病假回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM