나는 화면의 왼쪽을 따라 시간 축을 그리는 D3 프로젝트를 가지고있다. D3 전환을 사용하고 있으므로 윈도우 크기를 부드럽게 전환하고 싶습니다. 그러나 축 설정은 진드기 레이블의 "dy"속성을 변경하여 즉시 진드기 레이블이 아래로 점프 한 다음 SVG가 전환 될 때마다 원래 위치로 다시 전환합니다. 진드기 텍스트의 "dy"속성을 축 호출의 일부로 설정하거나 전환하는 더 좋은 방법이 될 수있는 방법이 있습니까?틱 텍스트 속성을 재설정하지 않고 D3 축을 전환하는 방법은 무엇입니까?
내 초기 (일회성) 축 설정 :
var timeScale = d3.time.scale().domain([minTime, maxTime]);
var yAxis = d3.svg.axis().scale(timeScale).tickFormat(d3.time.format("%-m/%-d %-I:%M%p")).orient("right");
나는/전환에게 내가 사용하고있어 SVG 요소를 업데이트하는 기능을 가지고있다. 처음으로 SVG를 그릴 때 init은 true로 설정되고, 그 후에는 false로 설정됩니다.
function updateSVG(init) {
...
timeScale.rangeRound([topPadding, svgHeight]);
// Use a transition to update the axis if this is an update
var t = (init) ? svgContainer : svgContainer.transition().duration(750);
// {1}: Create Y axis
t.select("g.axis").call(yAxis);
// {2}: Move Y axis labels to the left side
t.selectAll("g.tick > text")
.attr("x", 4)
.attr("dy", -4);
...
}
{1}의 업데이트에서 눈금 레이블은 모두 이전 attr() 호출에서 "dy"속성이 "-4"입니다. {2}에서 축을 적용하면이 요소의 "dy"속성이 기본값 인 ".32em"으로 재설정 된 후 천천히 다시 "-4"로 전환되어 창이 크기가 조정되고 지터가 올라가고 축 다시 그립니다. 여기
는이 결과 상자의 크기를 조정할 y 축에 점프를 보여줍니다 JSFiddle 작업, 몇 픽셀로 크기를 조정하고 명백해야한다입니다 :
왜 틱 값에 대한 오프셋을 설정하고 있습니까? 일반적으로 축/축을 조정하는 것이 좋습니다. –
틱 크기를 svg 너비와 같게함으로써 SVG에 그려지는 배경 격자 선이 생겼습니다. 나는 눈금 선을 그리드 선 위에 놓고 그 위에 그려지지 않도록 레이블을 약간 위로 올렸습니다. – Brian
올바르게 이해한다면 오프셋을 수행하기 위해't' 대신에'svgContainer'를 사용하면됩니다 - http://jsfiddle.net/YkDk4/2/ –