2014-12-31 6 views
0

내 데이터 형식은 [[날짜, 값], ...] 형식입니다. 예를 들어각 날짜별로 상위 k 개의 레코드 선택

:

[[date1, value1], [date1, value2], [date2, value3], ....]]

내가 그 날의 최고 5 값이어야한다 각 날짜 만 5 가치와 그 5 개 값을 선택하고 싶은 말은.

내 크로스 필터/치수 모양은 어떻게해야합니까?

답변

1

d3.nest을 사용하여 순수 D3을 사용하면 쉽게 수행 할 수 있습니다.

var topValuesByDate = d3.nest() 
    .key(function(d){ return d.date; }) 
    .rollup(function(leaves){ 
     return leaves.map(function(d){ 
      return d.value; 
     }).sort(d3.descending).slice(0, 5); 
    }) 
    .entries(data); 

기본 개념은 다음 날짜 별 상위 5 개 값을 식별하는 rollup을 사용하여 날짜별로 그룹 값이다.

var data = []; 
d3.range(1, 4).forEach(function(i){ 
    d3.range(10).forEach(function(j){ 
     data.push({date: "2015/01/0" + i, value: j }); 
    }); 
}); 
:

는 또한 시뮬레이션 데이터 a demo 그래서 같이 구성했다