ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • D3.js 차트 컴포넌트
    D3 2021. 7. 4. 23:51

    D3로 데이터를 시각화할 때의 핵심적인 절차

    • CSV나 JSON 포맷인 외부 파일에서 데이터 로딩하기
    • D3 스케일과 자바스크립트 내장 함수로 데이터를 포맷하고 변환하기
    • 시각화에 사용할 값을 만드는 데 데이터 측정하기
    • 데이터의 속성에 기초에 그래프를 생성하는 데 데이터 바인딩하기
    • <g> 요소로 여러 도형으로 구성된 복잡한 그래프 객체를 생성하는 데 하위 셀렉션 사용하기
    • 셀렉션에 enter() 와 exit() 메서드로 요소를 생성, 변경, 삭제하기

    D3는 엄청 많은 그래프 예제를 제공하며, 깃허브는 예제의 산실이다. 

     

    레이아웃

    생성기나 컴포넌트와 대조적으로 D3 레이아웃은 파이 차트 레이아웃처럼 상당히 간단할 수도 있고, 힘-방향 네트워크 레이아웃처럼 복잡할 수도 있다. 레이아웃은 일련의 데이터, 그리고 생성기로 구성된 배열을 입력받아 특정 위치와 크기로 그리는 데 필요한 데이터 속성을 동적 혹은 정적으로 추가한다. 

     

    축 생성

    차트 대부분에서 X-축은 시각을, Y-축은 양을 나타낸다. 이와는 대조적으로 산포도는 데이터의 양적인 데이터에 의해 결정되는 XY 위치에 따라 단 하나의 기호를 올려놓는다. 산포도는 과학 분야에서 흔히 볼 수 있으며, 의료 서비스의 비용과 품질을 비교하는 기사 그 밖에 언론 매체 등에서 점점 더 많이 사용하고 있다.

     

    데이터 표시

    산포도를 그리려면 다차원 데이터가 필요하다. 각 데이터점에는 연결된 데이터가 하나 이상 있어야 하며, 특히 산포도의 경우에는 데이터가 수치형이어야 한다. 산포도는 두 개의 수치로 구성된 데이터의 배열만 있으면 된다.

    고액 연봉과 친구 수의 대한 예제

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
        <title>Document</title>
    </head>
    <script>
        var scatterData = [{friends: 5, salary: 22000}, {friends: 3, salary: 18000}, {friends: 10, salary: 880000},
                            {friends: 0, salary: 180000}, {friends: 27, salary: 56000}];
        d3.select("svg").selectAll("circle")
          .data(scatterData).enter()
          .append("circle").attr("r", 5).attr("cx", function(d,i) {
                return i * 10;
          }).attr("cy", function(d){
                return d.friends;
          });
    
          var xExtent = d3.extent(scatterData, function(d){
                return d.salary;
          });
          var yExtent = d3.extent(scatterData, function(d){
                return d.friends;
          });
          var xScale = d3.scale.linear().domain(xExtent).range([0, 500]);
          var yScale = d3.sclae.linear().domain(yExtent).range([0, 500]);
    
          d3.select("svg").selectAll("circle")
            .data(scatterData).enter().append("circle")
            .attr("r", 5).attr("cx", function(d){
                    return xScale(d.salary);
            }).attr("cy", function(d){
                    return yScale(d.friends);
            });
                        
    
    </script>
    <body>
        
    </body>
    </html>

    'D3' 카테고리의 다른 글

    채광량에 따른 키우기 쉬운 농작물 예제  (0) 2021.07.12
    D3.js <svg> 요소  (0) 2021.06.28
    D3.js  (0) 2021.06.27
    D3.js?  (0) 2021.06.21
Designed by Tistory.