답변
나는 Lars Kotthoff's advices 중 하나와 함께 끝났다.
때마다 call(axis)
또한 텍스트 레이블을 조정합니다.
function renderAxis() {
axisContainer
.transition().duration(300)
.call(axis) // draw the standart d3 axis
.call(adjustTextLabels); // adjusts text labels on the axis
}
function adjustTextLabels(selection) {
selection.selectAll('.major text')
.attr('transform', 'translate(' + daysToPixels(1)/2 + ',0)');
}
// calculate the width of the days in the timeScale
function daysToPixels(days, timeScale) {
var d1 = new Date();
timeScale || (timeScale = Global.timeScale);
return timeScale(d3.time.day.offset(d1, days)) - timeScale(d1);
}
업데이트 : 여기
코드 단순화 나는 종종 적층하여이 작업을 수행 http://bl.ocks.org/oluckyman/6199145
더 쉽게 (즉, 내장) 방법은 없습니다 여기
는 눈금 위의 레이블 내 시간 축입니다 이 일을하는 것이지만, 여전히 달성 할 수 있습니다. 몇 가지 옵션이 있습니다. 가장 직관적 인 방법은tickFormat
function을 사용하여 숫자 앞뒤에 적절한 수의 공백이있는 형식을 지정하는 것입니다. 각 응용 프로그램마다 손으로 조정해야합니다.
또는, 당신은 그들이 그려 한 후 라벨 요소를 선택하고 그에 따라 그들을 이동 적절한 transform
속성을 추가 할 수 있습니다. 다시 말하지만, 이것은 손으로 조정해야합니다.
세 번째 옵션은 눈금과 레이블을위한 두 개의 다른 축을 갖는 것입니다. 아이디어는 틱을 제공하는 축에는 레이블이 없으며 다른 축에는 틱이 없다는 것입니다. 틱 값을 적절하게 설정해야하지만 최소한 올바른 오프셋을 추측 할 필요는 없습니다.
당신은 axis.tickSize(major[[,minor],end])
및 .tickSubdivide()
를 사용하여이 작업을 수행 할 수 있습니다. 틱은 큰 틱과 정렬되도록 설정되어 있지만이 틱의 높이를 0으로 설정하고 작은 틱의 높이를 설정하고 각 틱의 두 쌍 사이에 하나의 작은 틱이 있다고 지정하면 종료됩니다 틱간에 틱 레이블이 붙어 있습니다. 코드는 다음과 같습니다.
var myAxis = d3.svg.axis()
.ticks(15)
.tickSubdivide(1)
.tickSize(0, 6, 0);
최종 크기를 명시 적으로 설정해야합니다. 당신은 단지 두 개의 숫자를 제공하는 경우, 그들은 0
로 설정됩니다 major
및 end
및 minor
으로 해석됩니다 여기 fiddle.
좋은 해킹! 그러나이 해킹으로 인해 데이터가 이동되고 "3"대신에 "3.5"가됩니다. 이미지보기 : http://i.stack.imgur.com/OmfDN.png – oluckyman
라벨을 그 값을 나타내는 진드기와 다른 곳에 두는 것에주의해야합니다. 사용자는 두 레이블 사이의 틱이 레이블 사이의 값을 나타낼 것이라고 가정합니다. 그것의 한쪽에있는 숫자를 나타내거나 다른 하나는 모호함을 만듭니다. 또한 d3에는이를 수행 할 방법이 없습니다. – ckersch
캘린더에는 특별한 경우가 있습니다. 달력에서 날짜와 평일은 틱 사이에 배치됩니다. – oluckyman
: BTW
, 여기에 내가 끝내 일정 데모입니다 각 축은 각각 사용자 지정 .tickFormat()
입니다.
@timeDaysAxisLabels = d3.svg.axis()
.scale(@timescale)
.orient('bottom')
.ticks(d3.time.hour.utc, 12) # I want ticks at noon, easiest to just get them ever 12 hours
.tickFormat((d) =>
# only draw labels at noon, between the date boundaries
if d.getUTCHours() == 12
# draw the label!
formatter = d3.time.format.utc('%a %d %b') # "Mon 12 Apr"
return formatter(d)
else
# not noon, don't draw anything
return null)
.tickSize(0)
.tickPadding(30)
가 나는 또한 전혀 레이블 별도의 축을 만들 것이다, 0이 아닌 .tickSize()
: 나는 날짜 사이에 라벨을 배치하고있어 경우
, 나는 종종 이런 식으로 뭔가를 할 수 있습니다 진드기를 실제로 그리기 위의이 블록은 날짜 열의 레이블을 "열"의 가운데에 배치합니다.
와우, 왜이 답변에 대한 증오가 있습니까? 그것은 단단한 기술입니다. –
이미 몇 가지 좋은 답변이 있지만 하나만 더 추가하십시오. text-anchor
을 사용합니다.
같은 생각 : 통화 후 텍스트를 선택하고 위치를 변경하십시오. 축이 줌이 때문에
.call(xAxis)
.selectAll(".tick text")
.style("text-anchor", "start")
.attr("x", axisTextAdjust)
정확히 내가 필요한 것, 감사합니다. – James
svg.append("g")
.attr("class", "axis axis-years")
.attr("transform", "translate(0," + (height + 1) + ")")
.call(xAxis)
.selectAll("text")
.attr("x", "-1.8em")
.attr("y", ".00em")
.attr("transform", function (d) {
return "rotate(-90)"});
- 1. x 축의 눈금 변경
- 2. 그래프 축의 눈금 알고리즘
- 3. d3.js 범례와 함께 svg 텍스트를 정렬하십시오
- 4. D3 축에서 눈금 및 서식 레이블을 수정하려면 어떻게해야합니까?
- 5. d3js는 시간 눈금 축의 tickValues를 설정합니다.
- 6. D3.js x 축의 날짜가있는 선형 차트
- 7. D3.js 축에 특정 눈금 추가하기
- 8. d3.js 잘못된 시간 눈금 표시
- 9. D3 축의 최종 눈금 값을 표시하는 방법은 무엇입니까?
- 10. d3.js 노드와 레이블을 함께 이동
- 11. x 축의 눈금 레이블 변경
- 12. 다른 모든 눈금 레이블을 d3 시간 축에 표시 하시겠습니까?
- 13. d3 자동 겹침 눈금 레이블
- 14. 왜 막대 사이에 간격이 없음 D3 js
- 15. d3.js 레이더 그래프 - 라인 사이에 채우기
- 16. D3.js : 격자 선 사이에 마우스를 놓습니다.
- 17. 선형 눈금 대신 d3 로그 눈금 사용
- 18. 도킹 패널 중간에 레이블을 정렬하십시오.
- 19. D3.js x 축과 y 축의 위치/오프셋을 얻는 방법
- 20. matplotlib의 보조 눈금 레이블을 표시하면서 주요 눈금 레이블 숨기기
- 21. d3.js - y 축 눈금 적용시 비어있는 객체
- 22. 주요 눈금 선 사이에 작은 눈금 선을 그리는 방법은 무엇입니까?
- 23. x 축의 눈금 수를 수정 하시겠습니까?
- 24. 병렬 좌표 시각화에서 각 수직 축의 레이블을 설정하는 방법은 무엇입니까?
- 25. d3.js가있는 눈금 선 스타일링
- 26. nvd3.js 축의 로케일
- 27. X 축의 눈금에 연결된 D3.js 그래프에 배경 그라디언트를 사용할 수 있습니까?
- 28. WPF는 눈금 단추 사이에 구분합니다
- 29. d3.js (albersUsa)의 각 상태에 레이블을 추가하는 방법은 무엇입니까?
- 30. d3.js
첫 번째는 내 경우에는 도움이되지 것입니다. – oluckyman
이러한 모든 경우 확대 후 적절한 매개 변수를 재설정해야합니다. –