데이터분석/d3.js

<D3.js> 1. 가로막대 그래프 그리기(2)색, 데이터 변경

창조적생각 2022. 6. 16. 21:28

검은 막대만 존재한다면 그 그래프는 별다른 의미를 가지지 못합니다.

색을 변경하는 방법과 버튼을 이용하여 데이터를 변경하는 방법에 대해 알아봅니다.

 

1. 막대그래프 스타일 지정

 

SVG의 rect 요소의 스타일을 지정하기 위한 스타일시트 속성

속성 설명
fill 도형의 색을 지정
stroke 도형 선색 지정
stroke-width 도형의 선 넓이 지정

<test.html>

<!DOCTYPE html>
<html>
    <head>
        <style>
        svg{
            width: 500px; height: 240px; border:1px solid black; //그래프 나타낼 화면 설정
        }
        #myGraph rect{
            stroke : rgb(0, 100, 0); // 도형 선 색 초록색 설정
            stroke-width: 1px; // 도형 선 1px 넓이로 지정
            fill:rgb(0, 160, 0) // 도형 채울 색으로 녹색 지정
        }
        </style>
        <script src="https://d3js.org/d3.v7.min.js" charset="utf-8"></script>
        
    </head>
<body>
    <h1>가로형 막대그래프</h1>
    <svg id="myGraph">
       
    </svg>
    <script src="auto.js"></script>
</body>   
  

</html>

<실행결과>

2. 버튼을 이용한 데이터 변경

html에 id가 update인 버튼을 하나 svg태그 앞에 추가해줍니다.

<!DOCTYPE html>
<html>
    <head>
        <style>
        svg{
            width: 500px; height: 240px; border:1px solid black;
        }
        #myGraph rect{
            stroke : rgb(0, 100, 0);
            stroke-width: 1px;
            fill:rgb(0, 160, 0)
        }
        </style>
        <script src="https://d3js.org/d3.v7.min.js" charset="utf-8"></script>
        
    </head>
<body>
    <h1>가로형 막대그래프</h1>
    <button id = "update">업데이트</button>
    <br>
    <svg id="myGraph">
       
    </svg>
    <script src="auto.js"></script>
    <br/>
    
</body>   
  

</html>

auto.js에 on(이벤트, 호출할 함수) 메서드를 추가하여 버튼을 누르면 데이터가 바뀌도록 코드를 작성합니다.

var dataSet = [400,200,90,190,240];

d3.select("#myGraph") //svg 요소 선택
.selectAll("rect")
.data(dataSet)
.enter()
.append("rect")
.attr("x",0)
.attr("y",function(d,i){
    return i * 25;
})
.attr("width",function(d,i){
    return d + "px";
})
.attr("height","20px")

d3.select("#update") //버튼 선택
.on("click",function(){
    dataSet=[200,300,150,240,110];//새로운 dataSet 설정

d3.select("#myGraph")//이미 데이터수만큼의 그래프가 그려져있음으로 enter()와 append() 생략
.selectAll("rect")
.data(dataSet)
.attr("width",function(d,i){
    return d + "px";
})
})

<실행결과>

1) 초기화면

2) 업데이트 버튼 눌렀을 때

업데이트 버튼을 눌렀을 때 dataSet이 변경되었습니다.

 

728x90