2014-06-22 4 views
2

:crossfilter 및 dc.js를 사용하여 rowChart에 "missing"행을 표시하는 방법은 무엇입니까? 나는 <a href="http://dc-js.github.io/dc.js/docs/stock.html" rel="nofollow noreferrer">dc.js annotated example</a>에서 유사한 코드를 사용하고

var ndx = crossfilter(data); 
... 
var dayName=["0.Sun","1.Mon","2.Tue","3.Wed","4.Thu","5.Fri","6.Sat"]; 
var dayOfWeek = ndx.dimension(function (d) { 
    var day = d.dd.getDay(); 
    return dayName[day]; 
}); 
var dayOfWeekGroup = dayOfWeek.group(); 

var dayOfWeekChart = dc.rowChart("#day-of-week-chart"); 
dayOfWeekChart.width(180) 
    .height(180) 
    .group(dayOfWeekGroup) 
    .label(function(d){return d.key.substr(2);}) 
    .dimension(dayOfWeek); 

내가있어 문제는 데이터의 주 현재의 일이 내 rowChart에 표시되도록하고, 보장은 매일 없다 모든 데이터 세트에 표시됩니다.

이것은 많은 유형의 카테고리에서 바람직한 행동이지만, 낮과 월 이름과 같은 짧고 잘 알려진 목록을 생략하면 다소 혼란 스럽습니다. 대신 빈 행이 포함됩니다.

barChart의 경우 .xUnits(dc.units.ordinal)과 같은 것으로 .x(d3.scale.ordinal.domain(dayName))을 사용할 수 있습니다.

rowChart에 대해 동일한 작업을 수행 할 수있는 방법이있어 데이터에 존재하는지 여부에 관계없이 모든 요일이 표시됩니다.

crossfilter 라이브러리를 이해 했으므로 차트 레벨에서이 작업을 수행해야하며 치수는 그대로입니다. 나는 dc.js 1.6.0 api referenced3 scales 문서를 파고 들었지만 찾고있는 것을 찾지 못했습니다. 0 어떤 누락 된 행을 작성합니다 다음과 같이 호출

function ordinal_groups(keys, group) { 
    return { 
     all: function() { 
      var values = {}; 
      group.all().forEach(function(d, i) { 
       values[d.key] = d.value; 
      }); 
      var g = []; 
      keys.forEach(function(key) { 
       g.push({key: key, 
         value: values[key] || 0}); 
      }); 
      return g; 
     } 
    }; 
} 

:

@Gordon's answer을 바탕으로, 나는 다음과 같은 기능을 추가 한 솔루션

.group(ordinal_groups(dayNames, dayOfWeekGroup)) 
+0

감사합니다. 이것은 내게 많은 도움이되었습니다. – asquithea

답변

2

사실, 그룹을 dc.js에 전달하기 전에 그룹이 존재하는지 확인하는 것이 더 바람직하다고 생각합니다. 추가 항목마다 데이터 변경을 만든 당신이 확실 할 수 https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted

이 방법 :이 작업을 수행하는

방법 중 하나는 여기에 설명 된 "가짜 그룹"패턴이다.

추가 정보를 서수 도메인에 추가하려고했는데 여전히 가로 막 대형 차트에 표시되지 않았지만 가로 막 대형 차트에서 작동 했습니까? That sounds like a bug to me. 특히, 열 차트에 서수 도메인에 대한 지원을 추가해야하는 것처럼 보입니다.

+0

"가짜 그룹"이 유망 해 보입니다. 나는 그것을 시도 할 것입니다. barChart의 경우 도메인을 명시 적으로 지정할 수 있으므로 문제는 없습니다. 그러나 rowChart는 .y() 메서드를 사용하여 도메인을 지정할 방법이 없으므로 추가 할 다른 곳이 없습니다. . – Tom

+0

아. 당신이 정말 맞습니다. 행형 차트는 내부적으로 스케일을 사용하지 않고 단지 데이터 인덱스를'updateElements'에서 Y 변환으로 직접 매핑합니다. 문제의 근원을 지적 해 주셔서 감사합니다. – Gordon