2014-02-07 5 views
1

X 축과 Y 축의 정수가있는 간단한 막 대형 차트를 만들기 위해 이상한 행동을 한 것을 눈치 챘지만 올바르게 생성되었지만 X 축이 이상하게 보입니다. 치수를 설정하지 마십시오. 저는 지난 달 (1 월 7 일부터 현재까지)의 값을 가지고 있지만 X 축은 2013 년 6 월까지의 값에 맞게 조정됩니다.dc.js x 축 기본 도메인 이상한 결과

그래서 지난 달 동안 내 데이터에 대한 그래픽과 작은 조각이 비어 있습니다.

누구나 제안 할 수 있습니까?이 경계는 어디에서 가져 왔습니까? 필자는 코드에 버그가 있음을 알고 있지만 DC 매뉴얼에 적합한 정보를 찾지 못했고 검색 할 위치를 모른다. filter = crossfilter(json);

플롯 데이터 차원을 만듭니다 :

내 데이터를 crossfilter 만들기 :

내가 막대 차트를 사용하고 방법입니다 생성

var dimension = filter.dimension(function(d){ 
    var result = new Date(d.last_connected); 

    /* debug code to ensure I have no date older than last month */ 
    if (!('last-date-min' in document)) 
     document['last-date-min'] = result; 
    else if (result < document['last-date-min']) 
     document['last-date-min'] = result; 
    /* debug code end */ 

    return result; 
}); 

차원 내가 보장 가장 오래된 날짜는 '2014 년 1 월 7 일'입니다. 그룹 만들기 및시 최신 날짜를 확인 그룹화 : 그룹 생성되면

var group = dimension.group(function(d){ 
    var result = d3.time['day'].utc(d); 

    /* debug code */ 
    if (!('late-date-dim-min' in document)) 
     document['last-date-dim-min'] = result; 
    else if (document['last-date-dim-min'] > result) 
     document['last-date-dim-min'] = result; 
    /* debug code end */ 

    return result; 
}); 

는 차트를 생성하고 X와 Y 축 초기화 :

c = bar_chart('last-day-chart', dimension, group); 
c.x(d3.time.scale.utc()); 
c.xAxis().tickFormat(date_formatter); 
c.xAxisPadding(1); 
c.yAxis().tickFormat(formatter); 
c.filterPrinter(date_filter_printer); 

다야 : 지금은 데이터 집합을 가지고, 내가 확인을 그 데이터 세트에는 한 달 이전의 날짜가 없지만 7 개월 동안 차트가 표시됩니다. 문제의 원인은 어디입니까?

또한, 나는 렌더링 후 세부 사항을 검토 renderlet 디버깅 추가 나는 이상한 결과 참조 : 이것은 당신이 날짜를 구문 분석하는 방법에 문제가있을 수 있습니다

/* debug code */ 
c.renderlet(function(chart){ 
    debugger; 
    var scale_x = c.x(); 
    var scale_range = scale_x.range();   // is [0;100] - why? What is this range? 
    var min = document['last-date-min'];   // ok, Jan 2014 
    var dim_min = document['last-date-dim-min']; // ok 
    var scale_domain = scale_x.domain();   // is [0;63286] - why? What is 63286? 
}); 
/**/ 
+0

물론, 나는 d3.js 설명서를 검토 DC뿐만 아니라 이러한 설명은 디버깅 된 값과 대조 할 때 혼란스러워했습니다. ** _ 스케일. 범위 : 값이 지정되면 스케일의 출력 범위를 설정합니다 지정된 값 배열로 이동합니다. 배열에는 입력 도메인의 카디널리티와 일치하는 두 개 이상의 값이 포함되어야합니다. 주어진 배열의 요소는 숫자 일 필요는 없습니다 _ ** 내 데이터에 [0; 100]과 같은 것은 없습니다. ** _ scale.domain : 축척의 현재 입력 도메인을 반환합니다. ** ** [0; 63286]은 어디에서 왔습니까? 왜 [Date ("2014-01-07"), Date ("2014-02-07")]'? –

+0

나는 문제의 구체적인 예를 종합 할 수 있다면 당신을 도울 수 있다고 생각합니다. 가능한 경우 결과에 직접 영향을주지 않는 코드를 제거하여 jsfiddle에서 가장 간단한 형식의 문제를 재현 해보십시오. –

답변