2015-01-26 3 views
1

큰 데이터 세트에서 top20 알람을 표시해야합니다.dc.js rowChart topN with zeros

표준 dc.js는 훌륭하게 작동하며 rowChart에서 .rowsCap (20)을 사용하면 top20이됩니다.

데이터가 20 개 이하로 필터링 될 때 제로 행을 제거하려고합니다. 유사한 게시 된 질문 중 하나는 remove_empty_bins()가 .rowsCap (20)을 제거하더라도 올바르게 작동하는 https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted에서 가리 켰지 만 둘을 결합하지 못합니다.

dc.js-2.0.0-beta.1을 사용하면 remove_empty_bins()에 의해 생성 된 위조 그룹에 .top 속성을 사용할 수 없으므로 group.top (_cap) 호출의 3415 행에서 실패합니다.

가짜 그룹을 정의 할 때 .top (20)을 추가 할 때와 같은 오류가 발생합니다.

rowChart에 remove_empty_bins (original_group)을 .top() 또는 .rowCaps()와 결합하는 쉬운 방법이 있습니까?

--Nico

+0

실제 예제 fidle : http://jsfiddle.net/hwhfxz2t/6/ – nico

+0

제로 카운트 행 제거 작업을하는 fidle 예제 : http : // jsfiddle .net/hwhfxz2t/7/831 줄을 주석 처리 할 때 '멈춤'- Nico – nico

답변

4

그것은 조금 더 복잡 가짜 그룹에 .top(n)을 추가하는 것입니다

function remove_empty_bins(source_group) { 
    function non_zero_pred(d) { 
     return d.value != 0; 
    } 
    return { 
     all: function() { 
      return source_group.all().filter(non_zero_pred); 
     }, 
     top: function(n) { 
      return source_group.top(Infinity) 
       .filter(non_zero_pred) 
       .slice(0, n); 
     } 
    }; 
} 

효율이다 완벽하지,이 반입 때문에 정렬 된 순서로 모든 그룹 및 첫 번째 n을 제외하고 모두를 버리고, crossfilter는 힙을 사용하여 첫 번째에만 n을 가져올 수 있습니다. 그러나 그룹의 수가 거대하지 않는 한 이것은 중요하지 않습니다. 당신의 바이올린의

근무 포크 : http://jsfiddle.net/gordonwoodhull/za8ksj45/3/

편집 : 기능이 chart.ordering()와 중복과 혼란 버그에 이르게하기 때문에 group.top()를 제공 할 필요가 dc.js를 2.1.2에서 제거되고 있습니다. (이 데이터 전처리 기는 쓰기가 어려울뿐만 아니라)

+0

완벽 함. 고든 고마워. – nico

+0

'기타'표시 줄은 실제로 숨겨져 있습니다. 즉, 라벨 만 볼 수 있습니다. 완전히 숨길 수있는 방법이 있습니까? 또한 "기타"는 모든 값을 합하여 x 축 도메인을 엉망으로 만듭니다. – rafforaffo

+1

내 이전 댓글에 대한 답변으로 : "기타"는 ".rowsCap (maxNRows) .othersGrouper (false)"와 함께 사라질 것입니다. – rafforaffo