Base/WEB

[WEB] D3.js 에서 Data 사용법 - 2

반응형

D3.js DATA 사용법


D3.js는 script 단에서 data의 값을 정의해서 사용할 수 있다. 이때 배열 형태로만 저장 후 사용해야 된다.

 

기본 예제)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
    <script src='https://d3js.org/d3.v4.min.js'></script>

 </head>
 <body>
 	<p></p>
  <script>
  //data(), enter(), exit(), datum() - 선택한 요소에 데이터를 삽입
  myData = 100  					// 상수 값으로는 데이터 바인딩이 안된다.
  myData = [100] 					// 데이터는 이런형태로 넣어줘야 한다.
  d3.select('p')  					// 하나의 객체에 접근할때
  	.data(myData)					//데이터 바인딩하는 부분이다. data를 mydata로 쓴다는 부분이다.
	.text(function(d,idx){			//text를 넣겠다는 부분인데 이 text에 들어가는 값을 function의 반환값으로 정해진다.
									// d = data / idx = index 를  정의하는 말이다.
        return d;					// data 값을 리턴해준다. 여기서는 100을 리턴한다.
	})
  </script>
 </body>
</html>

 

심화 예제)

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
    <script src='https://d3js.org/d3.v4.min.js'></script>
 </head>
 <body>
  <p></p>
  <p></p>
  <p></p>

  <div>
  	<p>Error : This is Error</p>
	<p>Warning : This is Warning</p>
  </div>
  <script>
  data = [100,200,300] //data 값을 정의한다. 
  d3.select('body') // d3를 통해 body를 select 하고
  	.selectAll('p') // 그 안에 있는 p 태그 값들을 모두 가져온다.
    .data(data)		// 이 부분은 데이터를 바인딩 하는 부분이다. 여기서 위에 정의한 data를 사용하겠다는 뜻이다.
    .text(function(d,idx){  // text를 넣는데 text에 들어가는 값을 function을 결과 값을 넣는다.
    						// 여기서 d는 데이터를 뜻하고 idx는 index를 뜻한다. 이건 그렇게 정의되어 있는 부분이다.
	console.log('index : '+idx)		// console.log 를 통해 idx 값을 확인하고
	console.log('data : '+d)		// console.log 를 통해 data값을 확인한다.
	console.log('this : '+this) // 여기서 this 는 자기자신을 의미
	return d	// data = d  값을 반환한다.
  })
  
  //value를 동적으로 작업할수 있다.
  d3.selectAll('div > p').style('color',function(d,idx){//d3를 통해 selectall해 해당하는 부분을 모두가져온다.
  // 여기서는 div 안에 있는 p 태그를 모두 가져오는데 이 p 태그에 style을 입히는데 해당 'color'에 대한 value 값을 function으로
  // 지정해준다. 여기서도 d, idx로 data 와 index 값을 가져온다

txt = this.innerText ; //내부에 자기 자신을 가져온다. 그 값을  txt에 넣고
	//window.alert(txt)
	// 여기서 txt의 내장함수인 indexOf는함수는 문자열에서 원하는 문자열을 검색하여 찾거나 아니면 배열에서 원하는 특정 배열값의 
    // 존재여부 등을 확인할 수 있습니다. 배열의 경우 위치값을 index로 반환하는 함수로 사용된다.
	if(txt.indexOf('Error') >= 0) { // 이 값이 0이 아닐때 즉 존재할 때
		return 'red';				// red로 해당 p 부분의 style을 바꿔준다 
		}
	if(txt.indexOf('Warning') >= 0) {
		return 'blue';
		}
  }) //style tag 는 key value 형태이다. d는 현재 선택된 엘리먼트를 의미한다.
	</script>
 </body>
</html>

 

그 결과 위와 같은 결과가 나오게 된다.

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
    <script src='https://d3js.org/d3.v4.min.js'></script>

 </head>
 <body>
 	<p></p>
	<p></p>
	<p></p>
  <script>


  myData = [100,200,300,400,500] 	// 태그에 개수에 맞춰 출력 된다. 
  d3.selectAll('p')  				// d3를 통해 모든 p태그를 가져온다.
  	.data(myData)					// 데이터 바인딩 하는 부분이다
	.text(function(d,idx){			// text로 글자를 입력하는데 그 글자들은 fuction의 반환값을 입력한다.
		return d;					// data 값을 반환해준다.
	})



	data = [1,2,3,4,5]
	d3.select('body')		// d3를 통해 body를 select한 뒤
		.selectAll('span')	// 모든 span 태그를 가져온다.
		.data(data)			// 그 후 데이터를 바인딩하고 ([1,2,3,4,5])
		.enter()  			// data의 개수 맞춘다는 뜻이다. 이 말은(여기서 data의 길이만큼 span을 만든다.
		.append('span')		// 여기서 span을 추가하는데 위의 data개수인 5개를 맞춰 span을 5개 추가한다.
		//.text(function(d,idx){
		//	console.log(idx)
		//	return d ;
		.style('color',function(d){	// 그리고 이 span의 style은 funciont의 값으로 결정되는데
			if(d%2==0){				// data나누기 2했을 때 값이 0 이면 green으로
				return 'green';
			} else {
				return 'red'; 		// 아닐겨우 초록으로 나타낸다.
			}
		})
		.text(function(d,idx){
			return d ;
			})


  </script>
 </body>
</html>

 

결과는 이렇게 나오게 된다.

반응형