블로그 이미지
윤영식
Full Stacker, Application Architecter, KnowHow Dispenser and Bike Rider

Publication

Category

Recent Post

2013. 8. 5. 17:01 Data Visualization/D3.js

http://www.dashingd3js.com/ 사이트의 D3.js 익히기 실습을 하면서 요약 정리해 본다. 



1. 셋업

  - https://github.com/mbostock/d3 가서 오른쪽 하단의 "Download Zip" 에서 파일 다운로드 한다 

  - 디렉토리 생성하고 d3.min.js 파일을 해당 디렉토리에 copy하고 간단한 HTML 파일 하나 만들면 준비 끝 (hello.html)

<!DOCTYPE html>

<html>

  <head>

  <script type="text/javascript" src="d3.min.js"></script>

  </head>

  <body>

    <p>Hello!</p>

  </body>

</html>



2. DOM 조작하기 

  - DOM 을 조작하여 Circle을 그린다 (참조)

  - d3는 selector를 제공하여 tag, attribute, style 등을 제어할 수 있다 (jQuery처럼)

  - Chrome Dev Tools의 console을 통해서 조작한다 

  - append : child tag 추가, attr : attribute 추가

d3.select("body").append("svg").attr('width', 50).attr('height', 50).append('circle').attr('cx', 25).attr('cy', 25).attr('r', 25).style('fill', 'orange');

  - 결과 : 오랜지색 원을 동적으로 생성함 



3. Data와 DOM 바인딩하기

  - data 메소드를 이용한 DOM과 Data의 바인딩 (참조)

  - 코드 : data(<data>).enter() 한쌍의 구문을 사용 

var theData = [1,2,3];

var p = d3.select('body').selectAll('p').data(theData).enter().append('p').text('dowon');

  - selectAll에서 Data와 바인딩 될때 empty selection 일 경우 enter()를 통해서 바인딩이 가능토록 한다 

  - data 메소드는 theData에서 1 번째는 첫번째 p tag를 2 번째는 두번째 p tag와 맵핑된다 

  - virtual selection에는 enter, update, exit 가 있다 

    + enter : missing element 와 data binding

    + update : 기존 element 와 data binding

    + exit : 맨끝에것 제거 

  - 즉, enter를 하게 되면 virtual selection의 객체 레퍼런스가 return되어 append, attr, style등의 조작이 가능해 진다 


  - 그렇다면 데이터 1, 2, 3 의 숫자 값은 어디로 갔을까? 

    + __data__ 프러퍼티가 p tag 밑으로 추가되었고 해당 속성에 값이 할당되어 있다 

    + 이것을 Binding Data to DOM Element 라고 부른다 



4. 데이터를 엑세스하여 사용하기 

  - callback function을 등록한다 (참조)

var theData = [11,222,567];

var p = d3.select('body').selectAll('p').data(theData).enter().append('p').text(function(d) { return d;});

  - 의미 : variableName의 값으로 tag의 __data__ 속성값을 갖는다. functionName은 생략하여 anonymous function으로 등록 가능하다

1function functionName (variableName) {
2  return variableName;
3}

  -  결과


다음 실습은 실제 데이터를 가지고 다양한 모양을 그려본다


<참조>

  - DashingD3js.com

posted by 윤영식