2016-12-04 6 views

답변

2

이 답변이 차트를 만들고, 제라르의 솔루션 @에 확장 동적으로 조정하고, 몇 직류 처리. js 단점.

첫 번째로,이 예제의 원저자는 물건을 작동시키기 위해 몇 가지 것을 퍼지했습니다. 당신이 진정으로 동적 축을 원하는 경우에, 당신은 방법 자체에 대한 막대 폭을 계산하는 방법 dc.js를 표시해야합니다 :

magnitudeChart 
    .xUnits(dc.units.fp.precision(0.1)) 

.gap(65) 제거 - 매직 넘버 그런 종류의 기호는 항상 누군가는 할 수 없었다 자동 계산 된 항목을 얻는 방법 알아보기

dc.js가 막 대형 차트를 처리하는 방법에는 몇 가지 단점이 있습니다. 하나는 도메인을 설정할 때 자체 바 너비 또는 센터링을 실제로 설명하지 않으며 사용자가 지정한 바를 정확히 사용합니다. 최대 값을 자동으로 계산할 때 가장 오른쪽에있는 막대가 없음을 알 수 있습니다. (elasticX(true)도 마찬가지입니다.)

막대 중심 설정을 해제하고 계산할 때마다 0.1 막대 너비를 도메인에 추가해 봅시다.

magnitudeChart 
    .centerBar(false) 
    .x(d3.scale.linear().domain([2, d3.max(data, d=>d.mag)+0.1])) 

다음, crossfilter가 자동으로 빈 쓰레기통을 제거하지 않기 때문에 우리가 할 수있는 fake group에서 그룹을 포장 할 수 있습니다

function remove_empty_bins(source_group) { 
    return { 
     all:function() { 
      return source_group.all().filter(function(d) { 
       return d.value != 0; 
      }); 
     } 
    }; 
} 

magnitudeChart 
    .group(remove_empty_bins(magValueGroupCount)) 

을 그리고 우리는 차트가 그 도메인이 다시 그려 것마다 다시 계산 할 수 있습니다 과 같이 : 블록의

.on('preRedraw', function(chart) { 
    chart.x().domain([2, d3.max(chart.group().all(), kv=>kv.key) + 0.1]); 
    chart.rescale(); 
}); 

포크 : http://bl.ocks.org/gordonwoodhull/7675bb4bb67354cfdc7c6841106d7b31

+1

예제의 훌륭한 해부. 이것은 많은 도움이 될 것입니다. –

+1

우수 설명. 너는 DC의 창작자 야, 맞지? –

+2

아니, 방금 몇 년 동안 유지했습니다. 나는 두 가지 활동을 모두 즐긴다해도 코딩보다는 질문에 대답하는 것을 더 많이 배운다. :-) – Gordon

3

변경이 라인 :

.x(d3.scale.linear().domain([0.5, 7.5])) 

사람 :

.x(d3.scale.linear().domain([2, d3.max(data, d=>d.mag)])) 
+0

는 일 주셔서 감사합니다 전자 빠른 응답. 이것은 올바른 방향으로 나를 지적했다. 서문이나 선형 x 스케일을 원한다면 생각하지 못했습니다. 내 데이터를 되돌아 보니 실제로 서수를 원했습니다. –

+1

@ C.Wolcott은 내 대답을 받아 들일 수 없음을 표시하고 대신 고든의 것을 표시합니다. –