2014-03-06 4 views
1

이 코드를 사용하여 100 개가 넘는 그래프를 만들려고합니다. 각 그래프는 고유 한 그래프가되고 다른 점을 그립니다. 그러나, 나는 그들의 일반적인 레이아웃을 똑같이 보일 필요가있다.D3의 제어 축 틱 번호

.ticks() 함수를 사용할 때 D3은 내가 입력 한 값을 완전히 무시합니다. 모든 그래프는 항상 다른 수의 틱으로 나오지만 문제를 해결할 방법을 찾지 못합니다. D3가 내 가치를 받아들이도록 강요하는 방법이 있습니까? 나는() 함수 .tickValues를 사용하여 종료

var xAxis = d3.svg.axis() 
    .orient("bottom") 
    .scale(x) 
    .ticks(10) 
    .tickFormat(d3.format("d")) 
    .tickSize(1); 

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("left") 
    .ticks(10) 
    .tickSize(1); 

var yAxixObject = graph.append("g") 
    .call(yAxis) 
    .attr("transform", "translate("+ margin.left + "," + margin.top + ")"); 

var xAxisObject = graph.append("g") 
    .call(xAxis) 
    .attr("transform", "translate("+ margin.left + "," + (height + margin.top) + ")"); 
+0

.tickValues ​​([1,2,3, ...])를 설정 틱 인수보다 우선합니다 :

내 y 축에 대한 모든 관련 코드, 그가 내 프로젝트 전반에 걸쳐 분산되어 있습니다 axis.ticks에 의해 ... [docs] (https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues)에 따라. 가능한 경우 표시하려는 실제 값을 사용합니다. – FernOfTheAndes

+0

@FernOfTheAndes 이미 불행히도 내 그래프의 각기 다른 값을 사용하기 때문에 효과가 없을 것입니다. – Joel

+0

각 그래프의 범위를 안다면 일정 수의 진드기 포인트가 필요합니다. – FernOfTheAndes

답변

2

FernOfTheAndes '제안에서 :

이 관련 코드입니다. 방금 루프를 추가하여 .tickValues ​​()에 입력 할 배열을 만들었습니다. 이제 모든 데이터가 얼마나 다른지에 관계없이 내 그래프에는 여전히 10 개의 틱이 있습니다.

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("left") 
    .tickSize(1); 

... 

var ticksNum = 10; 
var yAxisTicks = []; 
var yDomain = [d3.min(data, function(d){return d.Level;}), d3.max(data, function(d){return d.Level;})]; 
y.domain(yDomain); 

... 

for (var i = 0; i < ticks; i++){ 
      yAxisTicks.push((yDomain[1] - yDomain[0])/(ticks - 1)* i + yDomain[0]); 
    } 

yAxis.tickValues(yAxisTicks); 

... 

var yAxixObject = graph.append("g") 
    .call(yAxis) 
    .attr("transform", "translate("+ margin.left + "," + margin.top + ")"); 
+3

사소한 개선 : y3dmin을 계산할 때 d3.minent와 d3.max를 별도로 호출하는 대신 d3.extent를 사용할 수 있습니다. – explunit