2016-08-30 5 views
0

다음 데이터 세트가 있습니다.값을 기반으로하는 DCjs- 크로스 필터 그룹화 키

[{..... att1: a, hits: 2}, 
{..... att1: a, hits: 2}, 
{..... att1: a, hits: 3}, 
{..... att1: b, hits: 2}, 
{..... att1: b, hits: 2}, 
{..... att1: c, hits: 9}, 
] 

내가 X 값 범위 '0-5', '~ 10', '10 + '및 Y 값은 상기 범위에 분류 키 수가 될 것이다 막대 그래프를 작성하고 싶다. 즉. ('10-5 ', 0)

답변

1

데이터를 버킷과 일치하는 서수 값 집합으로 변환하는 차원을 만듭니다. 그런 다음 그 차원을 그룹화하십시오. 귀하의 그룹은 각 버킷에 속하는 레코드 수를 계산합니다.

var data = [{att1: 'a', hits: 2}, 
    {att1: 'a', hits: 2}, 
    {att1: 'a', hits: 3}, 
    {att1: 'b', hits: 2}, 
    {att1: 'b', hits: 2}, 
    {att1: 'c', hits: 9}, 
]; 
var cf = crossfilter(data); 
var dim = cf.dimension(function(d) { 
    if(d.hits <= 5) return '0-5'; 
    if(d.hits <= 10) return '5-10'; 
    return '10+'; 
}); 
var grp = dim.group(); 
console.log(grp.all()); 

작동 예 (콘솔 확인) : https://jsfiddle.net/esjewett/u10h4xsu/2/

그런 다음이에 따라 dc.js를 막대 차트를 구축 할 수 있습니다. 막대 차트

var barChart = dc.barChart("#bar"); 

barChart.dimension(dim) 
    .group(grp) 
    .x(d3.scale.ordinal().domain(['0-5','5-10','10+'])) 
    .xUnits(dc.units.ordinal); 

dc.renderAll(); 

예 : https://jsfiddle.net/esjewett/u10h4xsu/4/

+0

내가 한 일이. 그러나 결과가 잘못되었다고 생각한다면. 'a = 5, b = 4, c = 9'에 대한 데이터 세트 총 조회수를 볼 때 히트가 아닌 총 히트 수로 그룹화하려고합니다. 따라서 예상 Y 스케일 값은'(0-5, 1) , (5-10, 2), (10+, 0)'이다. – bashhike

+1

그게 문제가 될 것입니다. 위조 된 그룹을 사용하여 확실히 이와 같은 작업을 수행 할 수 있지만이 차트에서 필터링하는 것은 무엇을 의미합니까? 그냥 표시하고 필터링하지 않으려면 가짜 그룹을 만드십시오. https://github.com/dc-js/dc.js/wiki/FAQ#combine-groups –

+0

포인터를 보내 주셔서 감사합니다! – bashhike