[D3.js] 버전에 따른 사라진 함수 복원

D3.js/D3.js|2019. 10. 29. 09:00

[D3.js] 버전에 따른 사라진 함수 복원


예전에 처음 D3.js를 공부할 때 제일 애먹은 부분이 버전 별 함수가 변경 되거나 또는 사리지는 함수들 때문에 유튜브 동영상 강좌를 보면서 현재 버전을 공부할 때 에러와의 싸움에서 무지 답답하고 귀찮았습니다. 오늘 다루는 사라진 함수를 사용하고 싶을 때 복원하는 방법을 다루고자 합니다.

1. d3.svg.diagonal() 함수


V3 버전에서 사용되는 함수인데 V4버전에서는 사라진 함수입니다. 이 함수를 사용하면 V4버전 부터는 에러가 뜹니다. 물론 V5버전에서 에러가 뜨겠죠. 이 곡선과 유사한 곡선을 물론 V4버전에서 제공되는데 이 곡선함수를 사용하고 싶을 때에는 V3버전을 링크 걸어서 사용해야 합니다.

하지만, 꼭 링크를 걸어서 사용할 필요는 없습니다. d3.js를 공부하시는 분들이라면 이 함수를 복원하고 싶은 충동을 느끼신다면 한번 직접 만들어 봐야 겠죠.

우선 V3 버전으로 곡선을 그려 보고 분석 해보도록 하죠.

V3버전 d3.svg.diagonal() 함수 사용 :

<svg height="300" width="300" style="background: yellow">
</svg>

<script src="https://d3js.org/d3.v3.min.js"></script>

<script>
var diagonal = d3.svg.diagonal()
      .source({x:10,y:10})
      .target({x:290,y:290});
var path = d3.select("svg").append("path")
      .attr("fill","none")
      .attr("stroke","#0000ff")
      .attr("stroke-width","1.5px")
      .attr("d",diagonal);
</script>

[결과]


위 결과는 V3버전에서 사용할 경우에 한해서 결과가 출력합니다. V4버전 이후 부터는 사용 할 수 없습니다.

2. d3.svg.diagonal() 함수 곡선 분석


이 함수를 복원하기 위해서는 HTML 문서 상에서 어떤 코딩으로 곡선이 그려지는지 분석해야 합니다.

한번 위 예제소스를 실행시켜서 나온 결과에 오른쪽 마우스 버턴을 클릭하여 소스창보기를 할까요.

<path d="M10,10C10,150 290,150 290,290" stroke-width="1.5px" stroke="#0000ff" fill="none"></path>

위의 HTML 코딩 소스를 보시는 것과 같이 path태그속에서 M10,10에서 시작하여 숫자들이 나열되고 290,290지점으로 끝나게 됩니다. 뭔지는 모르지만 path 태그에서 d속성값을 위 숫자대로 대입하면 결과 이미지 처럼 나오게 됩니다.

정리를 하면,

diagonal = d3.svg.diagonal()
      .source({x:10,y:10})
      .target({x:290,y:290});

위 기준으로 시작하고 path 부분만 만들어 주면 됩니다. 그러면 패치 경로는 아래 HTML문서상의 코딩처럼 나오게 코딩해야 겠죠.

 <path d="M10,10C10,150 290,150 290,290" stroke-width="1.5px" stroke="#0000ff" fill="none"></path></svg>

위 path 경로의 d값만 코딩으로 표현하면 되는데 이 부분을 함수로 만들어 보겠습니다.

3. d3.svg.diagonal() 함수 만들기


 <path d="M10,10C10,150 290,150 290,290" stroke-width="1.5px" stroke="#0000ff" fill="none"></path></svg>

위 코딩 부분을 잘 풀어서 정리하면 아래와 같이 코딩 할 수 있습니다.

d =  "M"+source.x+","+ source.y+"C"+source.x+","+(target.y-140)+
    " "+target.x+","+(target.y-140)+ " " +target.x+","+target.y ;

이 부분을 함수로 만들어 정리하면,

function diagonaltest(){
  return "M"+source.x+","+ source.y+"C"+source.x+","+(target.y-140)+
    " "+target.x+","+(target.y-140)+ " " +target.x+","+target.y ;
}

이 코딩은 제 블로그에 예전에 공부할 때 정리한 코딩입니다.

4. d3.svg.diagonal()함수를 diagonaltest()함수로 변경


<svg height="300" width="300" style="background: yellow">
</svg>

<script src="https://d3js.org/d3.v5.min.js"></script>

<script>
var source = {x:10,y:10};
var target = {x:290,y:290};
var path = d3.select("svg").append("path")
    .attr("fill","none")
    .attr("stroke","#0000ff")
    .attr("stroke-width","1.5px")
    .attr("d",diagonaltest);

function diagonaltest(){
  return "M"+source.x+","+ source.y+"C"+source.x+","+(target.y-140)+
    " "+target.x+","+(target.y-140)+ " " +target.x+","+target.y ;
}
</script>

[결과]


마무리


대충 사라진 함수를 복원한 실험을 하였습니다.사실 예전에 D3.js를 처음 공부 할 때잠깐 실험했네 내용인데 스팀잇 공간에 소개하고 싶어서 post을 올립니다. 사실 사라진 함수는 새로운 함수가 나왔기 때문에 사라졌고 그 새로운 함수를 쓰면 좋지만 d3.js를 공부한다면 이 부분을 직접 복원해 보는 공부도 해보는 것이 좋을 것 같아서 이번 post의 주제로 정했네요.

사실 주말에 다른 일 때문에 post 연재가 막힐 것 같아서 예전에 실험한 내용을 기반으로 다시 정리를 했네요.

오늘 실험한 내용은 우선 과거 버전으로 코딩해서 나온 HTML의 결과 소스를 보고 분석하여 복원 함수를 만들었는데 여러분들도 과거버전 중 사라진 함수가 있다면 그 함수를 이런식으로 HTML 소스를 분석하여 직접 만들어 보셨으면 합니다.

'D3.js > D3.js' 카테고리의 다른 글

[D3.js] TSV 파일 읽는법  (0) 2019.10.31
[D3.js] CSV 파일 읽는법  (0) 2019.10.30
[D3.js] HTML의 CSS  (0) 2019.10.28
[D3.js] HTML의 SVG 태그 D3로 코딩  (0) 2019.10.25
[D3.js] HTML의 SVG 태그  (0) 2019.10.24

댓글()