본문 바로가기

Dev.../플밍 관련 자료

[펌] JFreeChart로 동적 그래프를 만들어 보자.

이문서는 자바까페 유동환님의 세미나 자료입니다. 혼자보기 아까워 올려두긴 하지만 원작자의 불허가 있으면 즉시 삭제 조치하겠습니다.

 

제목 : JFreeChart로 동적 그래프를 만들어 보자.

일시 : 2003년 12월 13일.
발표 : 제1회 UnJ 자유 세미나 2주제.
강사 : 유동환(ideamaiden@empal.com)

 

세미나의 목표 : 순수 자바로 작성된 오픈소스 차트 API인 JFreeChart에 관한 기본 개념을 알아보고 기본적인 차트를 생성해본다. 또한 사용자 이벤트에 따라 동적으로 데이터를 갱신할 수 있는 타임시리즈 차트를 만들어 본다. 예제를 중심으로 각 차트의 세부 내용을 분석한다.  

일러 두기
    - ANT 1.4.1을 사용하여 컴파일.
? - JFreeChart 0.9.13을 적용.  
? - 는 jfreechart-demo-0.9.13.jar를 의미.

1. JFreeChart API에 대해서 알아보자.  

 자바로 만들어진 차트API가 여럿 존재한다. 지금까지 알려진 자바로 된 차트 API는 다음과 같다.

    •  Free라는 단어에 매료되었기 때문일까? 그중에서 이번에는 jfree.org (www.jfree.org)에서 제작하여 오픈소스로 제공하는 JFreeChart를 살펴본다. 왜 이것을 선택하였는가? 가장 큰 이유는 첨부된 DEMO 프로그램을 손쉽게 가져다 쓸 수 있도록 잘 분리가 되어있으며 생성된 차트도 모양이 이뻐서 큰 변경없이 프로젝트에 그대로 적용할 수 있으리라 생각되었기 때문이다. 

       

      A. JFreeChart의 기본 클래스 구조

          1. org.jfree.chart.JFreeChart

             - JFreeChart의 기본 클래스이다. 자바2D로 구현되어 있으며 현재 바 차트 , 라인 차트 , 파이 차트 , XY 플롯(시간에 따른 XY그래프)를 지원한다. JFreeChart클래스는 제목을 나타내는 AbstractTitle객체 , Legend객체 , Plot객체 그리고 DataSet객체로 이루어져 있다.

          2. org.jfree.chart.AbstractTitle

              - 차트의 제목을 나타낸다. 하위 클래스로 ImageTitle , LegendTitle , TextTitle로 구성되어 있다.

          3. org.jfree.chart.Legend

              - 차트에 포함된 시리즈(series)의 이름과 그 표현방식을 구성한다.

          4. org.jfree.chart.plot.Plot

              - JFreeChart클래스는 축과 데이터를 그리는(draw) 작업을 Plot에게 위임하였다. 대표적인 하위 클래스로는 CategoryPlot , PiePlot , XYPlot등이 있다.

          5. org.jfree.data.DataSet

              - 차트의 데이터를 담당한다. 대표적인 구현 클래스로는 DefaultPieDataSet , TimeSeriesCollection등이 있다.

          6. org.jfree.chart.ChartFactory

              - 차트를 생성을 위한 메소드를 제공한다. 예를 들어 pie차트를 만들기 위해서는 creatPieChart() 메소드를 사용한다.

          7. org.jfree.chart.ChartPanel

              - 차트를 생성한 후 JFreeChart 클래스를 ChartPanel에 넣어 스윙 컴포넌트로 사용할 수 있다.

       

      2. 데모 프로그램을 통해 기본적인 차트를 만들어 보자.

       

      A.  데모 프로그램의 시연

       를 가볍게 클릭해보자.

       여기 있는걸 가볍게 클릭해보면 JFreeChart의 모든 기능을 한눈에 알 수 있다. 그리고 여기에 나온 소스들은 src/org/jfree/chart/demo 폴더를 보면 모두 찾아볼 수 있다.

       우리는 이중에서 기본적인 몇 개의 예제를 살펴볼 것이다.

       

      A.  Pie Chart 제작

      제일 간단한 파이 차트로 몸을 풀어 보자. 동봉한 runPie.bat를 실행시키면 다음과 같은 화면을 얻을 수 있다.

       첨부한 PieChartDemo1.java를 살펴보자. 제 생각에는 이 코드가 가장 가독성이 좋은거 같네요.

       다음과 같이 데이터를 삽입하였다.  

       ChartFactory를 이용하여 파이 차트를 생성한다. t

       

       바탕화면은 노랑색으로 한다. 표시는 이름과 백분율을 포함하여 작성한다. 만약 데이터가 없을 때는 "No data available"을 표시한다.

       

       만든 차트를 JFrame으로 나타내기 위해 JPanel을 상속한 ChartPanel객체를 생성한다. 크기는 (500, 270)으로 한다.

       

       이제 main()함수에서 데모 객체를 생성하고 RefineryUtilities 객체를 사용하여 프레임을 화면의 정중앙에 배치하여 데모를 완성한다.

       

      B. XY 차트 만들기

      이번에도 가볍게 runArea.bat를 실행시켜 보자.

      자세한 내용은 AreaChartDemo.java를 살펴보면서 알아보자.

       3개의 시리즈를 사용하고 X축을 Type이라고 명명하여 데이터를 구성한다.

       

       배경색을 노랑으로 하고 , 부제목(subtitle)을 SansSerif체로 설정하여 "An area chart demonstration"이라고 하였습니다.

       그리고 X축의 Type을 세로로 배치하였습니다.

      C. Bar 차트 만들기

       Bar차트 데모는 runBar.bat를 실행시켜 보면 됩니다.

       BarChartDemo2.java 소스코드를 살펴보죠.  

       다음과 같이 2개의 그룹을 묶어 각각 3개의 시리즈에 값을 넣습니다.

       Bar 차트를 생성합니다. 만약 수직축으로 작성하고자 한다면 PlotOrientation.VERTICAL을 사용하시면 됩니다.

       

       마지막으로 legend를 빼고 , 수직축으로 데이터를 정렬해보겠습니다. 결과는 다음과 같습니다. 이게 더 자연스러운지도 모르겠네요.

       

      3. 동적인 차트를 만들어 보자  

       이제 오늘의 주제인 시간축으로 동적으로 갱신이 되는 차트를 만들어보겠습니다.

       runDy.bat를 실행시키세요.  이것은 버튼의 ActionEvent를 받아서 랜덤 데이터를 차트에 뿌려주는 예제입니다. 각 시리즈 1,2만을 갱신할 수도 있고 동시에 갱신도 가능합니다.

       

       소스를 살펴보죠.

       데이터 갱신 단위를 밀리 세컨드(ms)로 조정하고 시간의 흐름에 따른 X축을 의미하는 TimeSeries객체를 사용하였다. 2개의 시리즈를 표현하도록 구성되어 있다.

       X축(DomainAxis)을 동적으로 변경 가능하도록 조정하고 X축의 시간 길이는 60초로 한다. 60000.0 인 이유는 단위가 밀리 세컨드이기 때문이다.

       시리즈2의 설정을 한다. RangeAxis는 Y축을 의미한다.  

       요기가 데이터를 갱신하는 부분입니다. dataset에 포함된 TimeSeries에 직접 갱신을 하게 된다.

       

       간단하죠? ^^

      정리

       이 세미나을 들으시고 프로젝트시 간단하게 차트를 만들 필요가 있을 경우 JFreeChart에 포함된 데모 프로그램을 사용하여 최단시간에 원하는 차트를 만들 수 있기를 바랍니다.  

       다음과 같은 차트를 다루었습니다.

          1. 파이 차트

          2. 바 차트

       

      이문서는 자바까페 유동환님 세미나 자료입니다. 혼자 보기 아까워 올려놓긴 했지만 , 원작자의 불허가 있으면 바로 삭제조치 하겠습니다. ^^*

      제목 : JFreeChart로 동적 그래프를 만들어 보자.

      일시 : 2003년 12월 13일.
      발표 : 제1회 UnJ 자유 세미나 2주제.
      강사 : 유동환(ideamaiden@empal.com)

       

      세미나의 목표 : 순수 자바로 작성된 오픈소스 차트 API인 JFreeChart에 관한 기본 개념을 알아보고 기본적인 차트를 생성해본다. 또한 사용자 이벤트에 따라 동적으로 데이터를 갱신할 수 있는 타임시리즈 차트를 만들어 본다. 예제를 중심으로 각 차트의 세부 내용을 분석한다.  

      일러 두기
          - ANT 1.4.1을 사용하여 컴파일.
      ? - JFreeChart 0.9.13을 적용.  
      ? - 는 jfreechart-demo-0.9.13.jar를 의미.

      1. JFreeChart API에 대해서 알아보자.  

       자바로 만들어진 차트API가 여럿 존재한다. 지금까지 알려진 자바로 된 차트 API는 다음과 같다.

      • the PtPlot project (UC Berkeley copyright);
      • the JOpenChart project (LGPL);

            3. XY 차트(에리어 차트)

            4. 동적 차트.

         

        집필 후기

         원래 이 세미나의 목적은 회사에서 미니 프로젝트를 하면서 "동적 그래프"를 사용할 일이 생겼는데 원하는 성능이 나오지 않아서 고민하는 것을 정리하는데 있었습니다. 결국 JFreeChart의 소스를 고치는 지경에 이르렀는데  이 여정을 소개하려니 1회분으로는 무리가 있는 듯하네요.

         실질적인 쓰임새로는 먼저 위와같은 퀵-레퍼런스를 훑어보시는게 더 유용할 거 같습니다.

         아참~ 소스코드 잘 짰구나 하는 느낌 받았습니다. 나중에 기회가 되면 이부분도 마저 정리해보죠. ^^

        자바카페(JavaCafe.Or.Kr)