일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SEcure coding
- 시큐어코딩
- 로트관리
- mms.cfg
- D3.js
- rmate chart flash
- rmate chart
- chart flash
- 유효재고
- D3차트
- flash에러
- SQL0104
- adobe flash 보안정책
- 생산SCM
- Token ) was not valid
- Today
- Total
티스토리 뷰
D3.js 는 데이터 시각화 프레임워크로 잘 알려져 있고, 자바스크립트로 개발을 한다.
HTML5의 SVG(Scalable Vector Graphic)을 통하여
다양한 화면 해상도에서도 깨짐없는 Visualizing이 가능하고,
다양한 차트를 쉽게 제작할 수 있다.
D3로 만들 수 있는 차트는 github나 bl.ocks.org에서 확인해 볼 수 있다.
예제로 주어진 데이터(dataset)의 값(9, 19, 29, 39, 29, 19, 9) [line 6]을 화면에 출력해보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <meta charset="utf-8"> <svg width="500" height="300"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [ 9, 19, 29, 39, 29, 19, 9 ]; var svg = d3.select("svg"); for (var i = 0; i < dataset.length; i++) { svg.append("rect") .attr("height", dataset[i]) .attr("width", 40) .attr("x", 50 * i); } </script> |
D3 차트를 사용하기 위해서는 해당 스크립트 링크 주소를 넣어준다
<script src="https://d3js.org/d3.v4.min.js"></script> [line 4].
각 데이터는 차트로 보이기 위해 사각형(rect)을 생성(append)하였다 [line 11].
컬럼 차트이기 때문에 값(dataset[i])에 따라 도형(rect)의 크기(height)가 바뀌고 [line 12].
데이터 순서에 따라 생성한 도형의 위치(x)가 지정된다 [line 14].
값의 크기는 그대로 도형의 크기로 지정했지만
순서를 그대로 위치(x)로 사용하면 도형이 모두 붙어버리기 때문에
도형의 너비(40)보다 조금 크게(50 * i) 지정하였다.
마지막으로 도형을 주어진 데이터 개수 만큼(dataset.length)
반복해서 생성하기 위해 for문을 사용하였다 [line 10].
예제를 실행하면 생성된 바(rect)가
위에서 아래로 향하고 있는 문제를 확인할 수 있다.
웹에서 좌표는 좌측 상단을
기준 (0, 0)으로 좌표를 지정하여 구현하기 때문이다.
즉, y좌표를 지정하지 않았기 때문.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <meta charset="utf-8"> <svg width="500" height="300"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [ 9, 19, 29, 39, 29, 19, 9 ]; var svg = d3.select("svg"); for (var i = 0; i < dataset.length; i++) { svg.append("rect") .attr("height", dataset[i]) .attr("width", 40) .attr("x", 50 * i) .attr("y", 100 - dataset[i]); } </script> |
차트의 바닥을 y좌표가 100 인 지점으로 임의 지정 하고,
(단, 데이터의 최대값이 39 이므로 39 보다 작으면 안된다.) 각 도형의 y좌표 값을 100 에서 자신의 크기를 뺀 값으로 지정하면 다음 그림과 같이 실행된다.
다음으로 데이터의 개수 만큼 도형을 생성할 때 for문을 이용하였다. 이건 일반적인 자바스크립트를 이용한 코딩 방법이고 D3 (Data-Driven Documents)의 특징을 반영한 것이 아니다. D3는 이름 그대로 데이터 기반, 즉 데이터 처리를 쉽게 하는 것이 목적이기 때문에 다음과 같이 작성해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <meta charset="utf-8"> <svg width="500" height="300"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [ 9, 19, 29, 39, 29, 19, 9 ]; var svg = d3.select("svg"); svg.selectAll("bar") .data(dataset) .enter() .append("rect") .attr("height",function(d, i) {return d}) .attr("width", 40) .attr("x", function(d, i) {return (50 * i)}) .attr("y", function(d, i) {return (100 - dataset[i])}); </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!DOCTYPE html> <meta charset="utf-8"> <svg width="500" height="300"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [ 9, 19, 29, 39, 29, 19, 9 ]; var svg = d3.select("svg"); svg.selectAll("bar") .data(dataset) .enter().append("rect") .attr("height", function(d, i) {return (d*5)}) .attr("width", 40) .attr("x", function(d, i) {return (50 * i)}) .attr("y", function(d, i) {return (250-d*5)}); </script> |
|
|
||||||
|
|
일반적인 HTML 태그(예 div)는
배경색을 background-color에 지정하는데 SVG (D3)에서는 fill로 지정한다. 따라서, 생성한 바(rect)에 클래스를 추가하고 .attr("class", "bar") 스타일에서 bar 클래스에 fill 속성 값을 지정해 주면 된다. 마우스가 올라간 바(rect)의 색을 바꾸는 것은hover선택자를 이용한다.
text데이터 제작하는 방법은 rect를 생성하는 것과 동일한데 rect대신에 text를 생성하면 된다.
하지만 위 그림의 text 출력값이 맘에 들지 않는다.
text 위치와 옵션을 바꿔서 좀 더 보기 깔끔하게 출력해봤다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | <!DOCTYPE html> <meta charset="utf-8"> <style> .bar { fill: skyblue; } .bar:hover { fill: royalblue; cursor: hand; font-fill: black; font-weight:bold; } .text { fill: white; font-weight:bold; } </style> <svg width="500" height="300"></svg> <script src="https://d3js.org/d3.v4.min.js"></script> <script> var dataset = [9, 19, 29, 39, 29, 19, 9]; var svg = d3.select("svg"); svg.selectAll("rect") .data(dataset) .enter().append("rect") .attr("class", "bar") .attr("height", function(d, i) {return (d*5)}) .attr("width", 40) .attr("x", function(d, i) {return (50 * i)}) .attr("y", function(d, i) {return (250-d*5)}); svg.selectAll("text") .data(dataset) .enter().append("text") .text(function(d) {return d}) .attr("class", "text") // css .attr("x", function(d, i) {return 50 * i +10}) .attr("y", function(d, i) {return 250-d*5 +15}); </script> | cs |
text 역시 D3 svg에서는 fill로 사용한다.
도형 중앙에 출력하기 위해 x좌표에 +10을 더해주고,
도형안에 출력하기 위해 y좌표에 +15를 더해서 출력했다.
'D3.js' 카테고리의 다른 글
06 라인 차트(Line Chart) - 툴팁(Tooltip), 꺾은선(Curve Line) (0) | 2018.06.11 |
---|---|
05 라인 차트(Line Chart) (0) | 2018.06.05 |
04 툴팁(Tooltip) (2) | 2018.06.04 |
03 그리드(Grid) (0) | 2018.06.01 |
02 척도(X / Y축) - Axis와 Scale의 이해 (0) | 2018.05.30 |