2012-09-28 3 views

답변

50

형식 기능.

d3.svg.axis() 
    .tickFormat(d3.format("d")); 

또한 축이 자동으로 기본적으로 사용됩니다 규모 tickFormat를 사용할 수 있습니다.

+8

유용합니다. 눈금을 떨어 뜨릴 수있는 방법이 있습니까? 형식은 절반의 숫자를 숨기지 만 절반의 눈금을 유지합니다. – IBBoard

+2

@IBBoard 다음과 같이 시도하십시오 :'axis.ticks (tickCountSetter (yMax))'yMax는이 함수를 사용하여 몇 가지 숫자입니다.'function tickCountSetter (n) {if (n <= 2) {return n} else {return 10}}' – s2t2

12

나는 오히려 완전히 제외하는 것보다,이 값을 숨길 정도로 것을 깨달았다. 이것은 사용하여 수행 할 수있는 tickFormat (https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format)과 같은 : 당신은 d3.format를 사용하는 대신에 자신을 작성 할 수 있어야한다

d3.svg.axis() 
    .tickFormat(function(e){ 
     if(Math.floor(e) != e) 
     { 
      return; 
     } 

     return e; 
    }); 
5

tickFormat으로 d3.format("d")을 사용하면 모든 시나리오에서 작동하지 않을 수도 있습니다 (see this bug). Windows Phone 장치 (및 기타 다른 장치)에서 부정확 한 계산은 틱이 정수로 올바르게 감지되지 않는 상황을 초래할 수 있습니다. 이자형. 진드기 "3"은 내부적으로 d3.format("d")의 정수가 아닌 2.9999999999997로 저장 될 수 있습니다.

결과적으로 축이 전혀 표시되지 않습니다. 이 동작은 특히 진드기 범위가 10까지 분명 해집니다.

가능한 해결책 중 하나는 엡실론 값을 지정하여 기계 오류를 허용하는 것입니다. 값은이 방법으로 정확한 정수가 될 필요는 없지만, (데이터 오류보다 훨씬 낮아야한다) 엡실론 범위까지 다음 정수 다를 수 있습니다

var epsilon = Math.pow(10,-7); 

var axis = d3.svg.axis().tickFormat(function(d) { 
    if (((d - Math.floor(d)) > epsilon) && ((Math.ceil(d) -d) > epsilon)) 
     return; 
    return d; 
} 

또 다른 해결책도 언급 다른 스레드에서는 고정 틱 수를 지정한 다음 틱 (이제는 "거의"정수 여야 함)을 가장 가까운 정수로 반올림합니다. 이 작업을 수행하려면 데이터의 최대 값을 알아야합니다.

var axis = d3.svg.axis().ticks(dataMax).tickFormat(d3.format(".0f"))