728x90
    
    
  - Java로 워드클라우드 기능을 구현함에 앞서 글자크기는 DB 데이터 중 동일한 컬럼에서의 중복값으로 크기를 정했습니다
- d3.js는 인터넷이 되는 환경에서의 코드로 작성했습니다
1. 동일한 컬럼에서의 중복값 찾기 쿼리 - 제목과 제목컬럼에 대한 동일 값의 카운트를 글자의 크기로 담고자 AS MOUNT 에 담았어요
<select id="wordcloudlist" resultType="WordcloudDTO">
		SELECT 
			SUBJECT 
			,count(*) AS MOUNT 
		FROM 
			TABLE 
		GROUP BY 
			SUBJECT 
		HAVING count(*) >1
</select>
2. Java 단에서 리스트를 json형식으로 넘기기
@RequestMapping(value="/wordcloudtest.do", method = RequestMethod.GET, produces = "application/text; charset=UTF-8" )
@ResponseBody
public String wordcloud(HttpServletRequest request,WordcloudDTO WordcloudDTO) throws Exception{
		
		
		List<WordcloudDTO> list = dao.list(WordcloudDTO);
		
		String json = null;
		try {
			json = new ObjectMapper().writeValueAsString(list);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
		}
			
		
		
		return json;
	
}
3. Jsp 화면단에서 표현하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="https://rawgit.com/jasondavies/d3-cloud/master/build/d3.layout.cloud.js" type="text/JavaScript"></script>
       <style>
         body {
         font-family:"Lucida Grande","Droid Sans",Arial,Helvetica,sans-serif;
         }
        .legend {
             border: 1px solid #555555;
              border-radius: 5px 5px 5px 5px;
              font-size: 0.8em;
              margin: 10px;
               padding: 10px;
         }
        .bld {
              font-weight: bold;
         }
        </style>
</head>
<body>
      
           <div id="wordcloud" align="center" >
           </div>
<script>
	 var wordcloudlist = $.ajax({
		
		type: "GET",
	    url: "wordcloudtest.do",
	    dataType: "json",
	    contentType: "application/json; charset:UTF-8", 
	    async: false
		}).responseText; 
   
    var wordcloudtest = [{"subject":"맨유","mount":40},{"subject":"맨사타","mount":15},{"subject":"첼시","mount":10},{"subject":"토트넘","mount":35},{"subject":"리버풀","mount":30},{"subject":"인천유나이티드","mount":20}];
    
  	  var x = JSON.parse(wordcloudlist);
       var y = wordcloudtest   
  
    console.log("Json데이터 ",x)
    console.log("11",y)
    
  
    
    var color = d3.scale.linear() //선형적인 스케일로 표준화를 시킨다.
            .domain([0,1,2,3,4,5,6,10,15,20,100])//데이터의 범위, 입력 크기
            .range([0.50]);//표시할 범위, 출력 크기
            //ex)"#ddd", "#ccc", "#bbb", "#aaa", "#999", "#888", "#777", "#666", "#555", "#444", "#333", "#222"
    d3.layout.cloud().size([800, 300]) //[width,height]
            .words(x)
            .rotate(0)
            .fontSize(function(d) { return d.mount; })
            .on("end", draw)
            .start();
    
    function draw(words) {
        d3.select("#wordcloud").append("svg")//wordcloud 테이블에 svg를 붙이고
                .attr("width", 850)
                .attr("height", 350)
                .attr("class", "wordcloud")
                .append("g")
                .attr("transform", "translate(320,200)")
                .selectAll("text")
                .data(words)
                .enter().append("text")
                .style("font-size", function(d) { return d.mount + "px"; })
                .style("fill", function(d, i) { return color(i); })
                .attr("transform", function(d) {
                    return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
                })
                .text(function(d) { return d.subject; });
    }
    
</script>       
</body>
</html>
json 형식으로 받을시 wordcloudtest 형식처럼 받아야해요

이상입니다~!!
728x90
    
    
  'Java' 카테고리의 다른 글
| Java main 메서드 실행하기(F11) (0) | 2024.02.12 | 
|---|---|
| Spring - Java 로 게시판 구글차트(chart.js) 기능 만들기 (0) | 2021.02.05 | 
 
										
									
댓글