[D3.js] Scale 함수 사용

D3.js/D3.js|2019. 11. 15. 09:00

[D3.js] Scale 함수 사용



지난시간에 이여 CSV 데이터 파일을 읽어 Circle 모양으로 시각화 코딩을 했었습니다. 단순히 좌표(X,Y) 데이터 값을 통해 캔버스 위치에 Circle을 그리는 명령만 내렸는데 이제 좀 더 디테일적으로 Circle의 Scale을 적용해 보는 시간을 갖도록 합시다. 이 내용은 예전에 v4 번전 때 살짝 기초만 공부할 때 정리했던 내용인데 v5로 다시 정리를 해보네요.

1. CSV 데이터 파일


지난시간에 읽은 CSV 데이터 파일을 circle 모양으로 시각화 코딩을 복습해 볼까요.

[data.csv] : 데이터 간격은 콤마(,) 입니다.(반지름 r를 추가)

x,y,r
50,50,1
100,150,3
150,50,5
200,150,7
250,50,9

2. Scale 함수 사용


[기존 소스]

<script src="https://d3js.org/d3.v5.min.js"></script>
<body>
  <script>
    //배경
    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");
                    
    //데이터 출력
    function render(dataset){
      var circle = svg.selectAll("circle").data(dataset)
            .enter().append("circle")
             .attr("cx",function(d){return d.x;})
             .attr("cy",function(d){return d.y;})
             .attr("r",10)
             .attr("fill","red")
    }
        
    //데이터 읽기
    d3.csv("data.csv",type).then(function(data){      
         render(data);
    });
        
    //데이터 타입
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body> 

위 소스를 보면 attr()함수 내에 r이라는 속성이 있는데 이것이 바로 반지름입니다. 이 반지름 값은 지난시간까지 10으로 고정시켰는데 이제는 크기를 조절하여 시각화를 하고자 합니다.

d3.scaleLinear() 함수를 이용하여 크기를 자동으로 조절 하여 볼까요.

 d3.scaleLinear()
      .domain([참조최소값, 참조최대값])
      .range([출력최소값, 출력최대값]);

위 코딩은 기본 틀로 숙지해주시는 것이 좋습니다. 갑자기 아두이노 생각이 나네요. 아두이노에서 사용하는 map()함수와 유사하네요.

  • map(입력값,참조최소값,참조최대값,출력최소값,출력최대값)

사설은 접고 위 기본구조는 domain(참조범위)이고 range(반환범위)로 이해하시면 되겠습니다.

**예) **

var scale = d3.scaleLinear().domain([0, 10]).range([0, 100]);

위와 같이 지정하면,

scale(1) => 10이 반환.
scale(5) => 50이 반환
scale(10) => 100이 반환

그러면 실제 그렇게 나오는지 살펴 볼까요.

[소스]

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

<body>
 <script>
 
  var Scale = d3.scaleLinear().domain([0,10]).range([0,100]);

  console.log(Scale(1));
  console.log(Scale(5));
  console.log(Scale(10));

 </script>
</body>

[결과]


결과가 정상적으로 출력 되었습니다. 어떤 느낌인지 아시겠지요. 이 Scale 함수를 이용하여 Circle의 크기를 자동으로 조절하게 하면 데이터 시각화가 좀 더 그럴싸하게 표현 되겠죠.

3. 기존 소스에서 Scale함수를 적용하여 표현


    //데이터 출력
    function render(dataset){
      var circle = svg.selectAll("circle").data(dataset)
            .enter().append("circle")
             .attr("cx",function(d){return d.x;})
             .attr("cy",function(d){return d.y;})
             .attr("r",10)
             .attr("fill","red")
    }

기존 소스에서 수정할 부부는 위 데이터 출력 부분입니다. 경계를 나누어 코딩을 하니깐 어디를 수정해야 할지 쉽게 찾을 수 있게 되었죠.

수정 부분은 다음과 같습니다.

.attr("r",10) //반지름
.attr("fill","red") //원색

반지름 10이라고 기존에 고정했는데 Scale 함수를 이용하여 데이터 크기를 조절하겠습니다 그리고 고정 Red 색을 Color로 범위를 점해서 데이터 값에 따라서 Color를 지정해 봅시다.

위 Scale 기본구조에 맞게 한번 지정해 보았습니다.

var rScale = d3.scaleLinear()
                     .domain([0,10])
                     .range([0,50]);

데이터 참조범위는 0~10사이로 잡아놓고 반환 범위는 0~50사이로 해서 반지름의 크기를 조정했습니다. 데이터 값이 너무 클수도 있고 찾을 수도 있습니다. 그렇게 되면 캔버스 영역을 벗어나거나 너무 작게 Circle이 그려질 수 있기 때문에 캔버스의 영역에 맞게 데이터 전체의 Scale를 조절하기 위해서 위와 같이 코딩합니다.

다시, 3줄로 코딩을 나열하는게 좀 보기가 그러니깐 한줄로 표현해보죠. 추가로 Color도 동일하게 지정해 보겠습니다.

var rScale = d3.scaleLinear().domain([0,10]).range([0,50]);
var ColorScale = d3.scaleLinear().domain([0,10]).range(["red","blue"]);

이렇게 해서 Circle의 반지름과 Color를 만들어 놓았습니다. 이제는 참조 데이터 값에 맞게 반환 range()값만 가져와서 실제 캔버스에 그려주면 됩니다.

출력 데이터 값들을 순차적으로 Circle의 r, fill의 값을 지정하여 캔버스에 그리면 됩니다.

.attr("r",function(d){return rScale(d.r);})
.attr("fill",function(d){return ColorScale(d.r);});

종합해보면,
[소스]

<script src="https://d3js.org/d3.v5.min.js"></script>
<body>
  <script>
    var rScale = d3.scaleLinear().domain([0,10]).range([0,50]);
    var ColorScale = d3.scaleLinear().domain([0,10]).range(["red","blue"]);

    //배경
    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");
                    
    //데이터 출력
    function render(dataset){
      var circle = svg.selectAll("circle").data(dataset)
            .enter().append("circle")
             .attr("cx",function(d){return d.x;})
             .attr("cy",function(d){return d.y;})
             .attr("r",function(d){return rScale(d.r);})
             .attr("fill",function(d){return ColorScale(d.r);});
    }
        
    //데이터 읽기
    d3.csv("data.csv",type).then(function(data){      
         render(data);
    });
        
    //데이터 타입
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body> 

[결과]


위 그림처럼 좀 더 그럴싸하게 데이터가 시각화 된 모습을 보실 수 있죠.

여기서, 여러분들은 먼가 아쉬운 점을 찾아야 합니다. 그 아쉬움은 뭘까요. 바로 domain()함수에 있습니다. 자세히 살펴보시면 참조 범위가 0~10사이로 고정되어 있습니다. 데이터를 시각화하는데 참조 데이터를 고정된 값의 범위로 묶어 둔다는 것은 좀 그렇죠. 만약 데이터가 20일 때는 프로그램 소스에 가셔서 직접 해당 위치의 값을 수정해야 합니다.

자연스럽게 참조값의 범위를 읽어 온 데이터 값에 따라 맞춰서 표현하고 싶을 때 그부분을 코딩에 담아 낸다면 좀 더 멋지겠죠.

다음은 그 부분에 대해 이야기 하겠습니다.

4. d3.max 함수로 참조 데이터 범위를 지정


D3.js 함수에는 min(), max()함수가 있습니다. 오늘 사용할 함수는 max()함수 입니다. 사용법은 동일하니깐 max() 사용법을 잘 보시고 나중에 최소값 사용할 일이 있으면 max 대신에 min으로 수정하세요.

그럼 d3.max( ) 함수를 사용해 볼까요.

var rScale = d3.scaleLinear().domain([0,10]).range([0,50]);

위 코딩이 있다면 domain([0,10])함수의 0~10사이의 참조범위를 지정할 때 이때 max값 10을 읽어 올 데이터의 최대값으로 지정해 봅시다.

예) 위의 data.csv 파일에 반지름은 r에 들어 있습니다. 그러면 다음과 같이 코딩하여 max값을 찾아 냅니다.

[소스]

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

    //데이터 읽기
    d3.csv("data.csv",type).then(function(data){
      var max_r = d3.max(data, function(d) { return d.r; });
      console.log(max_r);
    });

    //데이터 타입
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body>     

[결과]


보시는 것과 같이 읽어 온 데이터 값 중의 최대값이 9가 나왔네요. 이렇게 해서 최대값을 캔버스의 나타낼 수 있는 최대값 범위가 되었네요.

최대값을 Scale 함수에 지정

 var rScale ;
 var max_r = d3.max(data, function(d) { return d.r; });
 
 rScale = d3.scaleLinear().domain([0,max_r]).range([0,50]);

위 코딩은 대충 의미를 아시겠지요.

종합해보면,

[소스]

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

<body>
 <script>

   var rScale ;
   var ColorScale ;
   var svg = d3.select("body").append("svg")
         .attr("width",500)
         .attr("height",500)
         .style("background-color","yellow");

   function render(dataset){
     var circle = svg.selectAll("circle").data(dataset)
           .enter().append("circle")
            .attr("cx",function(d){return d.x;})
            .attr("cy",function(d){return d.y;})
            .attr("r",function(d){return rScale(d.r);})
            .attr("fill",function(d){return ColorScale(d.r);});
   }

   d3.csv("data.csv",type).then(function(data){
        var max_r = d3.max(data, function(d) { return d.r; });
        rScale = d3.scaleLinear().domain([0,max_r]).range([0,50]);
        ColorScale = d3.scaleLinear().domain([0,max_r]).range(["red","blue"]);
        render(data);
   });

   function type(d){
     d.x=+d.x;  //parseFloat(d.x);
     d.y=+d.y;  //parseFloat(d.y);
     return d;
   }
 </script>
</body>

[결과]


아래와 같이 결과를 얻었습니다. 그런데 별 차이가 없어 보일 꺼에요. 그 이유는 기존 data.csv 파일을 사용했기 때문입니다.


마무리


CSV 데이터 파일을 시각화 할때 Scale 함수를 사용하는 방법을 살펴 보았습니다. 하다보니 꽤 내용이 길어졌는데 간단히 정리하면 딱 두줄 입니다.

var rScale = d3.scaleLinear().domain([0,10]).range([0,50]);
var ColorScale = d3.scaleLinear().domain([0,10]).range(["red","blue"]);

이걸 배우기 위해서 내용을 정리가 좀 안되고 길게 쓰게 되었네요. 한번 간단히 읽어보는 기분으로 보시고 방금 이야기한 이 두줄의 의미만 정확히 이해하시면 됩니다.

[출력]

  • rScale(데이터)
  • ColorScale(데이터)

이렇게 해서 D3.js를 이용하여 캔버스 크기에 맞게 자동으로 크기를 조절할 수 있게 되었습니다.

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

[D3.js] scaleLinear 함수  (0) 2019.11.19
[D3.js] 데이터 배열 다룰 때 유용함 함수  (0) 2019.11.18
[D3.js] 코딩의 가독성 높이기  (0) 2019.11.14
[D3.js] CSV, TSV, JSON, XML 시각화  (0) 2019.11.13
[D3.js] XML 파일 읽는법  (0) 2019.11.11

댓글()

[D3.js] 코딩의 가독성 높이기

D3.js/D3.js|2019. 11. 14. 09:00

[D3.js] 코딩의 가독성 높이기



한번에 쭉 명령어를 나열하는 것보다 함수 단위로 쪼개서 명령 동작을 구분하여 가독성을 높이는 작업을 한번 해볼까 합니다. 오늘 실험하는 코딩법은 그냥 하나의 방법일 뿐 보는 관점에 따라 좋은 방법일 수도 아닐 수도 있습니다. 더 큰 틀로 묶는게 나을 수도 있지만 이렇게 쪼개서 나누는 것이 나을 수도 있습니다. 단지 예를 들어 이런식으로도 접근해 볼 수 있다는 의미의 접근법입니다.

1. CSV 데이터 파일 읽기


지난시간에 읽은 CSV 데이터 파일을 circle 모양으로 시각화 코딩을 복습해 볼까요.

[data.csv] : 데이터 간격은 콤마(,) 입니다.

x,y
50,50
100,150
150,50
200,150
250,50

[소스]

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

    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");

    d3.csv("data.csv").then(function(data){
        var circle = svg.selectAll("circle").data(data)
               .enter().append("circle")
                 .attr("cx",function(d){return d.x;})
                 .attr("cy",function(d){return d.y;})
                 .attr("r",10)
                 .attr("fill","red");
    });
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body>

[결과]


이 부분은 지난시간에 했던 내용이고 이 부분을 각 동작을 구분 지어서 나눠어 보도록 하겠습니다.

2. CSV 데이터 파일 구분지어 코딩


위 코딩은 큰틀에서 세부분으로 나뉩니다.

[구분]

  • svg 캔버스 영역
  • csv 데이터 읽기
  • circle 형태로 데이터 출력

(1) svg 캔버스 영역


var svg = d3.select("body").append("svg")
       .attr("width",500)
       .attr("height",500)
       .style("background-color","yellow");

위 부분은 그냥 두겠습니다.

(2) csv 데이터 읽기


d3.csv("data.csv").then(function(data){      
     render(data);
});

위 부분은 데이터를 읽는 부분으로 안에는 사용자정의함수 호출만 해놓고 더이상 코딩하지 않습니다. 이렇게 하면 이부분만 보면 "아! 데이터를 읽는 부분이군!" 이렇게 가독성을 높일 수 있습니다. 데이터를 읽어와 render()함수에 data를 넘겨줘서 뭔가 동작을 수행하게 되는 거구나 하고 쉽게 해석 할 수 있습니다.

(3) circle 형태로 데이터 출력


function render(dataset){
      var circle = svg.selectAll("circle").data(dataset)
            .enter().append("circle")
             .attr("cx",function(d){return d.x;})
             .attr("cy",function(d){return d.y;})
             .attr("r",10)
             .attr("fill","red")
}

위 코딩을 보면 읽어 온 데이터를 실제 출력하는 부분으로 어떻게 데이터를 출력하는지 전체 소스에서 해당 출력 영역의 경계를 명확하게 구분지을 수 있습니다. 뭔지는 모른데 circle로 데이터를 출력하는 거구나 하고 구분지어 쉽게 해석 할 수 있습니다.

3. 소스


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

<body>
  <script>
    //배경
    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");
                    
    //데이터 출력
    function render(dataset){
      var circle = svg.selectAll("circle").data(dataset)
            .enter().append("circle")
             .attr("cx",function(d){return d.x;})
             .attr("cy",function(d){return d.y;})
             .attr("r",10)
             .attr("fill","red")
    }
        
    //데이터 읽기
    d3.csv("data.csv",type).then(function(data){      
         render(data);
    });
        
    //데이터 타입
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body> 

4. 결과


결과는 아래와 같이 정상적으로 출력 되었네요.


마무리


CSV 데이터 파일을 시각화 할때 이렇게 나누니깐 보기가 훨씬 편해졌죠. 함수단위로 나뉘어서 해당 부분이 어떤 동작을 수행하는지 가독성이 높아졌습니다. 이것은 짧은 코딩 예제를 나눈거라서 구지 저렇게 할 필요가 있을까 생각 할 수 있습니다 하지만 중요한 것은 이렇게 함수 단위로 구분지어 넣으면 나중에 수정하거나 특정 코딩부분을 다른 곳에 이식 할 때 유용합니다. 하나의 틀 형태로 쭉 코딩을 써내려 갈 수 도 있지만 이렇게 분산된 캡슐 형태로 함수 단위로 쪼개어 놓으면 이점이 더 많습니다.

오늘은 그냥 이런식으로 코딩 스타일이 있구나 정도로 알아 두시면 좋습니다.

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

[D3.js] 데이터 배열 다룰 때 유용함 함수  (0) 2019.11.18
[D3.js] Scale 함수 사용  (0) 2019.11.15
[D3.js] CSV, TSV, JSON, XML 시각화  (0) 2019.11.13
[D3.js] XML 파일 읽는법  (0) 2019.11.11
[D3.js] JSON 파일 읽는법  (0) 2019.11.01

댓글()

[D3.js] CSV, TSV, JSON, XML 시각화

D3.js/D3.js|2019. 11. 13. 09:00

[D3.js] CSV, TSV, JSON, XML 시각화


오늘은 지금까지 CSV, TSV, JSON, XML 데이터 파일을 읽어오는 실험만 하였습니다. 정확히 해당 데이터 값을 콘솔창에서 확인 햇는데 이번에는 특정 이미지화 해서 데이터를 시각화 하는 실험을 하겠습니다.

1. CSV 데이터 파일 시각화


지난시간에 읽은 CSV 데이터 파일을 circle 모양으로 시각화를 한번 해보았습니다.

[data.csv] : 데이터 간격은 콤마(,) 입니다.

x,y
50,50
100,150
150,50
200,150
250,50

[소스]

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

    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");

    d3.csv("data.csv").then(function(data){
        var circle = svg.selectAll("circle").data(data)
               .enter().append("circle")
                 .attr("cx",function(d){return d.x;})
                 .attr("cy",function(d){return d.y;})
                 .attr("r",10)
                 .attr("fill","red");
    });
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body>

[결과]


2. TSV 데이터 파일 시각화


지난시간에 읽은 TSV 데이터 파일을 circle 모양으로 시각화를 한번 해보았습니다.

[data.tsv] : 데이터 간격은 Tab 간격입니다.

x   y
50  50
100 150
150 50
200 150
250 50

[소스] : 코딩은 CSV랑 동일합니다.

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

    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");

    d3.tsv("data.tsv").then(function(data){
        var circle = svg.selectAll("circle").data(data)
               .enter().append("circle")
                 .attr("cx",function(d){return d.x;})
                 .attr("cy",function(d){return d.y;})
                 .attr("r",10)
                 .attr("fill","red");
    });
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>
</body>

[결과]


3. JSON 데이터 파일 시각화


지난시간에 읽은 JSON 데이터 파일을 circle 모양으로 시각화를 한번 해보았습니다.

[data.json]

[
  {
    "x": "50",
    "y": "50"
  },
  {
    "x": "100",
    "y": "150"
  },
  {
    "x": "150",
    "y": "50"
  },
  {
    "x": "200",
    "y": "150"
  },
  {
    "x": "250",
    "y": "50"
  }
]

[소스] : 코딩은 CSV랑 유사 합니다.

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

<body>
  <script>

    var svg = d3.select("body").append("svg")
          .attr("width",500)
          .attr("height",500)
          .style("background-color","yellow");

    d3.json("data.json",type).then(function(data){
        var circle = svg.selectAll("circle").data(data)
               .enter().append("circle")
                 .attr("cx",function(d){return d.x;})
                 .attr("cy",function(d){return d.y;})
                 .attr("r",10)
                 .attr("fill","red");
    });
    function type(d){
      d.x=+d.x;  //parseFloat(d.x);
      d.y=+d.y;  //parseFloat(d.y);
      return d;
    }
  </script>

</body>

[결과]


4. XML 데이터 파일 시각화


지난시간에 읽은 XML 데이터 파일을 막대형 차트 모양으로 시각화를 한번 해보았습니다.

[data.xml]

<?xml version="1.0" encoding="UTF-8" ?>

<data>
  <x>50</x>
  <x>100</x>
  <x>150</x>
  <x>200</x>
  <x>250</x>  
</data>

[소스] : 데이터가 한개임으로 지난시간 배운 막대형 차트를 이용하여 적용해 보죠.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>codingman</title>
    <style>
    .chart div {
      font: 10px sans-serif;
      background-color: steelblue;
      text-align: right;
      padding: 3px;
      margin: 1px;
      color: white;
    }
    </style>
  </head>
  <body>
    <div class="chart"></div>
    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script>

      d3.xml("data.xml").then(function(data){
       d3.select(".chart").selectAll("div").data(data.documentElement.getElementsByTagName("x"))
          .enter().append("div")
          .style("width", function(d) { return  d.textContent + "px"; })
          .text(function(d) { return d.textContent; });
         });
    </script>
  </body>
</html>

[결과]


마무리


CSV, TSV, JSON은 동일한 데이터 형식으로 만들었기 때문에 차트 시각화는 동잏한 방식으로 circle 모양으로 출력하였고 xml은 데이터 값이 한종류로 이루어져서 그냥 막대형 차트 형식으로 출력해 보았습니다.

이렇게 해서 데이터 읽기는 마무리 하도록 하죠. 다음에는 이렇게 읽어 온 데이터를 어떤식으로 시각화 할지 d3.js 함수들을 이용하여 실험해 보도록 하죠.

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

[D3.js] Scale 함수 사용  (0) 2019.11.15
[D3.js] 코딩의 가독성 높이기  (0) 2019.11.14
[D3.js] XML 파일 읽는법  (0) 2019.11.11
[D3.js] JSON 파일 읽는법  (0) 2019.11.01
[D3.js] TSV 파일 읽는법  (0) 2019.10.31

댓글()

[D3.js] CSV 파일 읽는법

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

[D3.js] CSV 파일 읽는법


Data 형식이 CSV파일로 되어 있을 때 CSV 파일을 D3.js에서 읽는 실험을 간단히 해보도록 하죠. 엑셀로 DB작업을 했을 때 그 파일을 CSV 파일형식으로 변환을 많이 합니다. CSV 파일 형태로 된 데이터를 많이 다루게 됩니다. D3.js에서 CSV 파일을 어떻게 읽어오는지 알아두시면 좋겠죠.

1. 크롬 웹브라우저에서 파일 열기


D3.js의 결과를 보기 위해서 웹브라우저 창에서 열게 됩니다. CSV 파일을 웹브라우저에서 읽고 결과를 출력하기 위해서는 사전 세팅이 필요합니다. 제가 처음에 연습했을 때는 그냥 ATOM 편집기를 이용하여 가상 웹서버 플로그를 통해 http형식으로 열어 CSV 파일을 쉽게 열었는데 ATOM 편집기가 안깔린 노트북에서 실험을 하다 보니 크롬 웹브라우저 "file:///C:/" 열면 Cross domain 문제로 ERROR가 발생합니다. "보안 어쩌구 저쩌구" 문제로 열리지 않습니다. 그래서 크롬 속성창의 속성 정보를 수정해야 합니다.

크롬 속성창에서 대상 부분에 "--allow-file-access-from-files "를 추가하면 되는데 제 노트북에서 안되더군요. 그래서 검색을 좀 하니 저와 같은 문제를 해결한 post가 있어 겨우 크롬 문제를 해결했네요.

삽입 문장 : "--disable-web-security --user-data-dir"

삽입 할 문장은 아래 그림에서 대상 부분에 이여서 삽입문장을 복사해서 붙이시면 됩니다.


2. CSV 파일 열기


[data.csv]


(1) 버전 4에서 열기


d3.csv("data.csv", function(error, data) {
  if (error) throw error;
  console.log(data);
});

[결과] 크롬


(2) 버전 5에서 열기



버전 5에서는 기존의 버전4 d3.csv()함수는 작동하지 않고 변경 되었네요. 위 출처에 가셔서 한번 어떤게 바뀌게 되었는지 읽어 보시기 바랍니다.

d3.csv("data.csv").then(function(data) {
  console.log(data);
});

[결과] 파이어폭스


위 코딩도 지원하는 최신 웹브라우저에서 사용이 가능 하고 구버전에서는 작동이 되지 않더군요. 좀 불편하다면 그냥 버전 4로 기존 방식을 사용하는게 좋을 듯 싶네요. 크롬 버전이 낮아서 그런지 크롬에서 정상작동하지 않아서 파이어폭스로 실행해 보았네요.

3. ATOM 편집기에서 열기


웹브라우저의 속성창을 수정 할 필요 없이 그냥 열 수 있습니다. 처음부터 ATOM에서 연습하시면 귀찮은 부분은 없어집니다.


다운받아서 설치하시면 그냥 단순한 편집기로 별 다른 기능은 없습니다. 패키지를 설치해야 하는데 여러분들이 공부하고 싶은 패키지를 검색하셔서 설치하시면 됩니다. 오늘 post의 실험을 하기 위해서는 preview HTML 패키지를 설치하시면 됩니다. 혹시 가상서버로 여시고 싶을 때는 Live Server 패키지를 설치하시면 됩니다. 참고로 여러가 패키지가 있는데 각자 선호하는 기능들이 다르기 때문에 구글 검색에서 ATOM 편집기에 사용하기 좋은 패키지를 한번 검색하셔서 원하는 패키지를 설치하시기 바랍니다.

(1) 버전 4 CSV 파일 열기



(2) 버전 5 CSV 파일 열기



마무리


버전 5에서는 CSV()함수가 좋아졌는데 좀 불편한 감이 없잖아 있네요. 계속 개선은 되는데 개선 될 때 마다 버전 별 코딩이 바뀌니깐 매번 체크해 줘야 한다는 점이 D3.js를 공부하는 장애가 되고 있네요. 현재까지 잘 사용하던 함수가 새로운 버전이 나와 바뀌게 될 경우 코딩에 에러가 발생한다는 점이 지금 써먹지 못한다면 구지 최신 버전에 맞게 공부 할 필요성이 있는지라는 코딩 의욕을 꺾는 요소가 되는 것 같아요.

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

[D3.js] JSON 파일 읽는법  (0) 2019.11.01
[D3.js] TSV 파일 읽는법  (0) 2019.10.31
[D3.js] 버전에 따른 사라진 함수 복원  (0) 2019.10.29
[D3.js] HTML의 CSS  (0) 2019.10.28
[D3.js] HTML의 SVG 태그 D3로 코딩  (0) 2019.10.25

댓글()