dev

d3.js xAxis scaleTime() 사용시 날짜 포맷 처리

뫼B우스 2023. 6. 3. 09:35
반응형

d3.js로 라인 및 막대그래프를 사용할 때  x의 값이 날짜인 경우 scaleTime()을 사용한다.

 

예를 들어
데이터가 '2023-01-01' , '20230101' 등 날짜 표현은 다양하게 생성된다. 
개발 시 하이픈을 제거한 '20230101'의 포맷을 많이 사용하는데,
이 경우 scaleTime()을 사용할 때 d3.timeParse()을 사용하여 포맷을 설정해줘야 한다. 

다음 예시와 같이 사용하면 된다. 

const parseTime = d3.timeParse('%Y%m%d');

const x = d3.scaleTime()
            .range([0, width])
            .domain( d3.extent(data, function (d) {
                  return parseTime(d.saleDate);			// 예시
             }));
             
                        
const line1 = d3.line()
            .curve(d3.curveCatmullRom.alpha(0.5))
            .x(function (d) {
                return x(parseTime(d.saleDate));        // 예시
            })
            .y((d) => y(d.avg));

추가적으로 

x, y 축에 데이터 값을 표시할 경우

 

svg .append("g")
      .attr("transform", `translate(0,${height})`)
      .call(d3.axisBottom(x).tickFormat(d3.timeFormat('%m/%d')))   

위와 같이 코딩하였을 경우  월/일 로 표시된다. 
만일 날짜값이 두개로 찍힐 경우

 .call(d3.axisBottom(x).tick(날짜 데이터 갯수).tickFormat(d3.timeFormat('%m/%d'))) 
위와 같이 수정하면 해결할 수 있다.

 

이번에도 개발 방법의 한가지를 공유했을 뿐 다른 방법도 존재한다.

 

따라서 코딩 방법의 선택은 개발자의 몫이다.

 


 

반응형