ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • D3.js <svg> 요소
    D3 2021. 6. 28. 23:09
    <!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">
        <title>Document</title>
        
        <!-- d3 라이브러리 추가 -->
        <script src="d3.v3.min.js" type="text/JavasScript"></script>
    </head>
    <body>
        <div id="infovizDiv">
            <svg style="width: 500px;height: 500px;border: 1px lightgray solid;">
                <path d="M 10,60 40,30 50,50 60,30 70,80"
                    style="fill:black;stroke:gray;stroke-width:4px;"/>
                <polygon style="fill:gray;"
                points="80,400 120,400 160,440 120,480 60,460"/>
                <g>
                    <line x1="200" y1="100" x2="450" y2="225"
                        style="stroke:black;stroke-width:2px;"/>
                    <circle cy="100" cx="200" r="30"/>
                    <rect x="410" y="200" width="100" height="50"
                        style="fill:pink;stroke:black;stroke-width:1px;"/>
                </g>
            </svg>
        </div>
    </body>
    </html>

    예제 코드

     

    <svg>요소에 대해서 알아보자

    모든 그림을 넣을 요소다. 왼쪽 꼭대기는 0, 0이며, 이 예제에서 사각형 모양으로 정의한 500px x 500px 영역을 벗어난 그림은 모두 잘린다. <svg> 요소는 CSS로 테두리와 배경을 다르게 설정할 수 있다. 그리고 viewBox 속성을 이용하면 동적으로 크기를 변경할 수 있다.

    CSS로 SVG 영역의 스타일을 변경하거나 다음과 같이 D3로 스타일을 추가할 수 있다.

    d3.select("svg").style("background", "darkgray");

     

    <circle>,<rect>,<line>,<polygon>요소

    SVG는 범용 d 속성보다 다루기 쉽도록 각기 크기와 위치 속성을 가진 일련의 공통된 도형을 제공한다. 속성은 사용할 요소에 따라 다르다. <rect>는 x와 y속성으로 도형의 왼쪽 꼭대기 위치를, height와 width 속성으로 높이와 너비를 결정한다. <circle> 요소는 cx와 cy 속성이 원의 중점을, r 속성이 원의 반경을 결정한다. <line> 요소는 x1과 y1 속성이 시작점의 위치를, x2와 y2 속성이 중점의 위치를 정의한다. <ellipse> 요소도 이와 비슷하게 간단한 도형을 정의하며, <polygon> 요소는 시계 방향으로 진행하며 다각형의 각 꼭지점의 XY좌표를 points라는 속성에 갖고 있다.

    스타일을 변경해 어떤 도형이든 색상, 스트로크, 투명도를 바꿀 수 있다. fill은 도형을 채울 색상을 결정하고, stroke, stroke-width, stroke-dasharray는 테두리를 결정한다.

     

    <text> 요소

    SVG는 도형뿐만 아니라 텍스트를 작성하는 기능도 제공한다. SVG 텍스트는 HTML 요소에서 볼 수 있는 포맷을 지원하지 않으므로 주로 레이블에서 사용된다. 기본적인 포맷 기능이 필요하면 <text> 요소 안에 <tspan> 요소를 넣어서 구현한다.

     

    <g> 요소

    그룹 요소인 <g>는 시각적으로 표현되지 않으며 공간을 차지하지 않는다는 점에서 지금까지 설명한 SVG요소들과 다르다. 대신 요소들을 논리적으로 그룹화한다. 많은 도형과 텍스트로 구성된 그래프 객체를 생성할 때는 <g>요소를 상당히 많이 사용한다. 예를 들어 원 위에 레이블을 놓고 원과 레이블을 동시에 움직이고자 한다면 다음과 같이 <g> 요소 안에 넣는 편이 좋다.

    <g>
    	<circle r="2"/>
        <text>This circle's Label</text>
    </g>

    영역 안에서 <g>요소를 이리저리 움직이려면 <g>의 transform 속성만 조정하면 된다. transform을 사용하려면 도형을 변환하는 방법을 구조화된 방식으로 기술해야 하므로 단순히 x나 y 속성을 변경하는 방법보다 다소 어렵게 느껴질 수 있다. 이 구조화된 기술 방법 중 하나인 translate()는 요소를 XY좌표쌍으로 이동하려면 translate(x, y)형태로 값을 지정한다.

    따라서 <g>요소를 오른쪽으로 100px, 아래쪽으로 50px 이동하고자 한다면 transform 속성을 transform="translate(100, 50)"으로 설정해야 한다.

    자식 요소들은 부모인<g> 요소의 위치를 기준으로 상대 위치에 그려지므로, transform 속성의 scale() 설정은 모든 자식 요소의 크기와 위치에 영향을 미친다.

     

    'D3' 카테고리의 다른 글

    채광량에 따른 키우기 쉬운 농작물 예제  (0) 2021.07.12
    D3.js 차트 컴포넌트  (0) 2021.07.04
    D3.js  (0) 2021.06.27
    D3.js?  (0) 2021.06.21
Designed by Tistory.