2015년 5월 4일 월요일

분석 : d3.js bar chart with tooltips

d3js.org example 중에 “Using d3-tip to add tooltips to a d3 bar bart”를 분석하였다.

아래 분석은 “Let’s Make a Bar Chart, Part 1 2 3“내용을 참조하였다.

example 예제에서 꾸미는 CSS나 속성은 모두 제외하고 데이타가 있을 때 어떻게 bar chart를 만들 것인가 순으로 분석하였다.

Step 1- Loading an external data file in tab-separated values(TSV) format

d3.tsv를 사용하여 데이터를 읽어오고, div tag기준으로 분류하였다. 또한 div의 width를 달리하여 값에 따라 차이가 나도록 하였다.

스크린샷 2015-05-04 16.15.07

위의 결과는 html으로 아래와 같이 된다.

http://ift.tt/1OT5Cbc

Step 2 – Bar chart using SVG

d3.select와 append를 사용하여 svg를 dom에 추가하고, selectAll.data를 사용하여 rect 객체를 추가 한다.

scale.ordinal은 공평하게 분류할때 사용한다. 주어진 0~width에서 domain에 들어온 갯수만큼 나누어서 x(d)에 의해서 x값을 주고, x.rangeBand()로 동일한 넓이를 받는다.

scale.linear는 주어진 범위와 domain으로 들어온 최대값을 매핑해서 그 값에 맞는 상대값을 계산하여 반환한다.

아래와 같은 결과가 나오게 된다.

스크린샷 2015-05-04 16.51.31

위의 결과는 html으로 아래와 같이 된다.

http://ift.tt/1OT5Cbe

Step 3 – Adding Axes

x,y축을 그리기 위해서 left, bottom에 margin를 넣어야 한다. 실제 예제에서는 top, right 모두 들어가지만 내용의 이해를 돕기 위해서 left, bottom만 넣었다.

svg를 640×480 전체 사이즈를 가지고, scaler들의 최대값을 margin를 뺀 값으로 변경하고, chart라는 object가 left로 translate left해서 실제 그리는 영역으로 사용했다.

d3에서는 축을 그리는 위해서 axis라는 api를 제공한다. 그 중에 orient는 axis(축)을 어디에 둘 것인가 지정하는 것이지만 내부적으로 tick를 그릴때 참고하는 것이지 실제 위치를 찾아주는 것이 아니므로 위치는 직접 잡아주어야 한다.

y축이 헷갈릴 수 있는데, 이유가 값이 일반적으로 우리가 배운 반대인 가장 위가 좌표상으로 0이고, 가장 아래가 가장 크므로 반대로 생각해야 한다.

스크린샷 2015-05-04 17.04.28

위의 결과는 html으로 아래와 같이 된다.

http://ift.tt/1OT5Ejo

html tag를 보면, tick이라는 group에 line과 text element가 추가된 것을 볼 수 있다. path, line, text를 axis가 넣어주는 것이다.

Step 4 – Add tooltips to a d3 bar chart

d3-tip은 추가로 lib가 필요로 한다.

사용법은 간단하다.

d3.tip이라는 api로 tip를 생성해서 연결하고자 하는 selector에서 call 하면 된다.

그리고 실제 적용해야 하는 rect object의 mouse event에 연결하면 끝난다.

해보면 각 rect에 event를 붙이고 나서 axes를 추가하면 정상적으로 svg element에 추가 되지 않는데 정확한 이유는 모르겠음.

스크린샷 2015-05-04 17.15.29

위의 결과는 html으로 아래와 같이 된다.

http://ift.tt/1EKDzD5

위의 full code는 http://ift.tt/1OT5Cbl 올려두었으니 참고바랍니다.

참고
http://ift.tt/HJj3sZ
http://ift.tt/1OT5Cbi




from WordPress http://ift.tt/1EKDz63

댓글 없음:

댓글 쓰기