2014-09-05 46 views
0

我有三個類別在條形圖中進行圖形化,因此有三個條形圖。但是,我想只繪製兩個類別,兩個小節。我有類別A,B,C,我想繪製子集A,B。這是一個工作jsfiddle。問題是,當我把["A","B"]加入.x(d3.scale.ordinal().domain(["A","B"]))時,第三個柱狀圖仍然繪製在其他柱狀圖上。幫助讚賞。條形圖的子集序號域

HTML:

<body> 
    <div id='bar1'><div><h3>Bar 1</h3></div></div> 
</body> 

JS

var data = [{ 
    Category: "A", 
    ID: "1" 
}, { 
    Category: "A", 
    ID: "1" 
}, { 
    Category: "A", 
    ID: "1" 
}, { 
    Category: "A", 
    ID: "2" 
}, { 
    Category: "A", 
    ID: "2" 
}, { 
    Category: "B", 
    ID: "1" 
}, { 
    Category: "B", 
    ID: "1" 
}, { 
    Category: "B", 
    ID: "1" 
}, { 
    Category: "B", 
    ID: "2" 
}, { 
    Category: "B", 
    ID: "3" 
}, { 
    Category: "B", 
    ID: "3" 
}, { 
    Category: "B", 
    ID: "3" 
}, { 
    Category: "B", 
    ID: "4" 
}, { 
    Category: "C", 
    ID: "1" 
}, { 
    Category: "C", 
    ID: "2" 
}, { 
    Category: "C", 
    ID: "3" 
}, { 
    Category: "C", 
    ID: "4" 
}, { 
    Category: "C", 
    ID: "4" 
}, { 
    Category: "C", 
    ID: "5" 
}]; 

var ndx = crossfilter(data); 

var XDimension = ndx.dimension(function (d) { 
    return d.Category; 
}); 

dc.barChart("#bar1") 
    .width(400).height(150) 
    .dimension(XDimension) 
    .group(XDimension.group().reduceSum(function(d){return d.ID})) 
    .x(d3.scale.ordinal().domain(["A","B"])) 
    .xUnits(dc.units.ordinal) 

dc.renderAll(); 

回答

2

沒有進行縮放或專注於序圖這裏要求:

https://github.com/dc-js/dc.js/issues/416

然而,直到實現,我會建議使用這裏所描述的「假組」技術:

https://github.com/dc-js/dc.js/wiki/FAQ#how-do-i-filter-the-data-before-its-charted

一般的過濾適配器可能看起來像(未經測試):

function filtered_group(group, bins) { 
    return { 
    all:function() { 
     return group.all().filter(function(d) { 
     return bins.indexOf(d.key) != -1; 
     }); 
    } 
    } 
}; 

然後使用它是這樣的:

var group0 = XDimension.group().reduceSum(function(d){return d.ID}), 
    xgroup = filtered_group(group0, ["A", "B"]); 
chart.group(xgroup); 
+1

工程很漂亮。在你的幫助下,我已經想出了許多方便的解決方法。我正在考慮創建一個包含我所有問題的例子的手冊。 – Koba 2014-09-08 15:42:15