[JAVA] JfreeChart를 이용하여 막대 와 선그래프 그리기

[%
//데이터 생성
///외부에서 데이터가 들어 오면 아래의 변수를 통해서 데이터 셋을 받은다.
// 현재는 없으므로 임의로 생성
double[] Arr_Data1 = new double[12]; //전체
double[] Arr_Data2 = new double[12]; //정상
double[] Arr_Data3 = new double[12]; //비정상

for ( int i=0 ; i[ 12; i++)
{
Arr_Data1[i] = Double.parseDouble(Integer.toString(i+1));
Arr_Data2[i] = Double.parseDouble(Integer.toString(i+1))*0.7;
Arr_Data3[i] = Double.parseDouble(Integer.toString(i+1))*0.3;

}

//데이터 그래프에 셋팅
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
DefaultCategoryDataset defaultcategorydataset1 = new DefaultCategoryDataset();
DefaultCategoryDataset defaultcategorydataset2 = new DefaultCategoryDataset();

for ( int i=0; i[12; i++)
{
defaultcategorydataset.addValue(Arr_Data1[i],"전체 접속자",Integer.toString(i+1)+ " 월");
defaultcategorydataset1.addValue(Arr_Data2[i],"정상 접속자",Integer.toString(i+1)+ " 월");
defaultcategorydataset2.addValue(Arr_Data3[i],"비정상 접속자",Integer.toString(i+1)+ " 월");
}

// 첫번째 막대 그래프 생성
//CategoryItemRenderer Interface
// 이것은 CategoryDataset Interface를 통해서 온 데이터들을 CategoryPlot class로 사용하게 만드는객체이다.
// 쉽게 얘기 해서 Dataset으로 넘어온 데이터 들을 Renderer를 통해 표현해 주는데 이것의 형태를 bar,line등의 형태로 보여주기 위한 Interface 이다.

StandardCategoryItemLabelGenerator standardcategoryitemlabelgenerator = new StandardCategoryItemLabelGenerator();
// generator 를 생성 한다 default는 숫자 포맷,

BarRenderer barrenderer = new BarRenderer();
// CategoryItemRenderer 로써 데이터를 이용해서 바형태를 그린다.

barrenderer.setItemLabelGenerator(standardcategoryitemlabelgenerator);
//모든 축의 item Label generator를 Set 한다.

barrenderer.setItemLabelsVisible(true);
// 모든축의 itemLabel visibility 를 지정한다.

CategoryPlot categoryplot = new CategoryPlot();
// CategoryDataSet 과 CategoryItemRenderer의 데이터를 이용 하는 Plot(작은구획)
// CategoryPlot calss 생성


categoryplot.setDataset(defaultcategorydataset);
//categoryplot에 위에서 만든 dataset를 넣는다.

categoryplot.setRenderer(barrenderer);
// Renderer를 지정한다.

categoryplot.setDomainAxis(new CategoryAxis("이용자수"));
// x축을 지정한다.
categoryplot.setRangeAxis(new NumberAxis("접속수"));
// y축을 지정한다.
categoryplot.setOrientation(PlotOrientation.VERTICAL);
//방향을 지정 한다 PlotOrientation.HORIZONTAL / VERTICAL

categoryplot.setRangeGridlinesVisible(true);
//배경의 X축그리드를 보이게 할건지 아닌지를 지정
categoryplot.setDomainGridlinesVisible(true);
//배경의 y축그리드를 보이게 할건지 아닌지를 지정



LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();
//라인과 꼭지점이 있는 모양의 Renderer를 만든다
categoryplot.setDataset(1, defaultcategorydataset1);
//public void setDataset(int index,
//CategoryDataset dataset)Sets a dataset for the plot.
//Parameters:
//index - the dataset index.
//dataset - the dataset (null permitted).

categoryplot.setRenderer(1, lineandshaperenderer);
// 두번째 라인 그래프 Renderer를 지정한다.


categoryplot.setDataset(2, defaultcategorydataset2);
// 세번째 데이터 셋 지정

LineAndShapeRenderer lineandshaperenderer1 = new LineAndShapeRenderer();
//세번째 그래프 Renderer를 만든다.

categoryplot.setRenderer(2, lineandshaperenderer1);
// 세번째 라인 그래프 Render를 지정

categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
// Rdering 할 순서를 지정

categoryplot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
// x축의 라벨에 쓰여지는 각도를 지정한다. (UP_90,UP45,STANDARD,DOWN_90,DOWN_45)

JFreeChart jfreechart = new JFreeChart(categoryplot);
// Chart를 생성
jfreechart.setTitle("년간 이용자 정보");
// Chart 타이틀 지정

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
//Rendering 된 정보를 저장하기 위한 구조 (JFreeChart.Draw()메소드를 이용하기 위해서는 한개 이상 생성)

String fileName = ServletUtilities.saveChartAsJPEG(jfreechart, 600, 300, info, session);
// temp디렉토리에 jpeg 형태의 이미지로 저장

String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;
//그래프의 URL값을 가지고 온다.
%]
[img src="[%=graphURL%]"/]

댓글

이 블로그의 인기 게시물

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)