[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%]"/]
//데이터 생성
///외부에서 데이터가 들어 오면 아래의 변수를 통해서 데이터 셋을 받은다.
// 현재는 없으므로 임의로 생성
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%]"/]
댓글