JFreeChart最新版本1.0.8a的研究系列——生成曲线图

生成曲线图

具体实现步骤

大致和柱状图的生成方式差不多
1)创建用于图形生成所要的数据集对象。
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
DefaultPieDataset类提供的setValue(data,rowKey,columnKey)方法,设置曲线图形显示的数据,其中:rowKey表示X轴数据,columnKey表示Y轴数据,data表示填充曲线图所要的实际数据。另一种方式批量设置,参数与上面对应的数组,DefaultCategoryDataset dataset = (DefaultCategoryDataset)DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

2)创建图形对象。
JFreeChart chart = ChartFactory.createLineChart3D("标题", null,null,dataset,PlotOrientation.VERTICAL,,true,false,false);
createLineChart3D方法是ChartFactory工厂类里的一个方法,用于3D曲线图的生成,平面曲线图使用createLineChart方法创建。八个参数分别代表:图形的标题、X轴标题、Y轴标题、dataset就是CategoryDataset类的实例对象、曲线图显示形式、是否显示图例、测试未明、是否显示鼠标志向提示,其中曲线图显示形式有,PlotOrientation.VERTICAL表示水平方式、PlotOrientation.HORIZONTAL表示垂直方式。

实例应用
package jfreechar.test;

import java.awt.Color;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpSession;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.Range;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetUtilities;

/***/ /**
*测试生成曲线(折线)图实例
*
*
@author左杰
*
*/

public class LineChartTest ... {
/***//**
*获取简单数据集对象
*
*
@return
*/

publicDefaultCategoryDatasetgetJdDataSet()...{
DefaultCategoryDatasetdataset
=newDefaultCategoryDataset();
dataset.addValue(
100,"鸡肉","一月");
dataset.addValue(
200,"鸡肉","二月");
dataset.addValue(
800,"鸡肉","三月");
dataset.addValue(
400,"鸡肉","四月");
dataset.addValue(
500,"鸡肉","五月");
dataset.addValue(
900,"鸡肉","六月");
returndataset;
}


/***//**
*获取组合数据集对象
*
*
@return
*/

publicDefaultCategoryDatasetgetZhDataSet()...{
DefaultCategoryDatasetdataset
=newDefaultCategoryDataset();
dataset.addValue(
100,"鸡肉","一月");
dataset.addValue(
300,"猪肉","一月");
dataset.addValue(
900,"羊肉","一月");
dataset.addValue(
600,"鸡肉","二月");
dataset.addValue(
400,"猪肉","二月");
dataset.addValue(
200,"羊肉","二月");
dataset.addValue(
900,"鸡肉","三月");
dataset.addValue(
500,"猪肉","三月");
dataset.addValue(
700,"羊肉","三月");
dataset.addValue(
300,"鸡肉","四月");
dataset.addValue(
200,"猪肉","四月");
dataset.addValue(
600,"羊肉","四月");
dataset.addValue(
100,"鸡肉","五月");
dataset.addValue(
300,"猪肉","五月");
dataset.addValue(
600,"羊肉","五月");
dataset.addValue(
900,"鸡肉","六月");
dataset.addValue(
400,"猪肉","六月");
dataset.addValue(
200,"羊肉","六月");
returndataset;
}


/***//**
*批量设置数据
*
@return
*/

publicDefaultCategoryDatasetgetDataSet()...{
//设置填充数据
double[][]data=newdouble[][]...{...{1310,220,1110,100,520,80},
...{720,1700,680,1640,520,859},...{130,1020,980,80,821,336},
...{40,400,360,1300,924,105}}
;
String[]rowKeys
=...{"猪肉","牛肉","鸡肉","鱼肉"};
String[]columnKeys
=...{"一月","二月","三月","四月","五月","六月"};
DefaultCategoryDatasetdataset
=(DefaultCategoryDataset)DatasetUtilities
.createCategoryDataset(rowKeys,columnKeys,data);
returndataset;
}


/***//**
*创建图表主对象JFreechart,并设置图像显示
*
@return
*/

publicJFreeChartcreateLineChart()...{

DefaultCategoryDatasetdataset
=getDataSet();
//创建JFreechart对象,3D状的
//JFreeChartchart=ChartFactory.createLineChart3D("江苏省上半年肉类销量统计图","江苏省",
//"销量",dataset,PlotOrientation.VERTICAL,true,true,false);
//创建JFreechart对象,3D状的
JFreeChartchart=ChartFactory.createLineChart("江苏省上半年肉类销量统计图","江苏省",
"销量",dataset,PlotOrientation.VERTICAL,true,true,false);
//数据区设置
CategoryPlotplot=chart.getCategoryPlot();
plot.setBackgroundPaint(Color.white);
//数据区背景色

//X、Y轴属性设置
NumberAxisrangeAxis=(NumberAxis)plot.getRangeAxis();
//数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//是否显示零点
rangeAxis.setAutoRangeIncludesZero(true);
//数据轴上(右)边距
rangeAxis.setUpperMargin(0.02);
//Y轴名称的倾斜角度
rangeAxis.setLabelAngle(0.3);
//设置数据轴的数据范围
rangeAxis.setRange(newRange(0,2000));
//设置刻度波动值
rangeAxis.setTickUnit(newNumberTickUnit(100));
//数据线设置
LineAndShapeRendererrenderer=(LineAndShapeRenderer)plot
.getRenderer();
//设置每个曲线的颜色
renderer.setSeriesPaint(0,Color.pink);
renderer.setSeriesPaint(
1,newColor(0,100,255));
renderer.setSeriesPaint(
2,Color.green);
renderer.setSeriesPaint(
3,newColor(24,68,100));
returnchart;
}


/***//**
*生成图形,保存图像到临时文件,并返回文件名
*
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*
@paramsession
*会话session
*
@return
*/

publicStringgetFileName(JFreeChartchart,intw,inth,HttpSessionsession)...{
//生成图形,保存图像到临时文件,并返回文件名
StringfileName="";
StandardEntityCollectionsec
=newStandardEntityCollection();
ChartRenderingInfoinfo
=newChartRenderingInfo(sec);
try...{
fileName
=ServletUtilities.saveChartAsPNG(chart,w,h,info,session);
}
catch(Exceptione)...{
System.out.println(
"Exception-"+e.toString());
fileName
="public_error_500x300.png";
}

returnfileName;
}


/***//**
*生成图形,保存到指定文件,文件类型为png
*
*
@paramfileName
*指定保存文件的路径及文件名
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*/

publicvoidSaveFileAsPNG(StringfileName,JFreeChartchart,intw,inth)...{
//生成图形,保存到指定文件,文件类型为png
try...{
ChartUtilities.saveChartAsPNG(
newFile(fileName),chart,w,h);
}
catch(IOExceptione)...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}


/***//**
*生成图形,保存到指定文件,文件类型为jpg
*
*
@paramfileName
*指定保存文件的路径及文件名
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*/

publicvoidSaveFileAsJPEG(StringfileName,JFreeChartchart,intw,inth)...{
//生成图形,保存到指定文件,文件类型为jpg
try...{
ChartUtilities.saveChartAsPNG(
newFile(fileName),chart,w,h);
}
catch(IOExceptione)...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}

publicstaticvoidmain(String[]args)...{
LineChartTestp
=newLineChartTest();
JFreeChartchart
=p.createLineChart();
//保存为图像文件
p.SaveFileAsPNG("d://linechart.png",chart,800,600);
//显示在GUI上
ChartFrameframe=newChartFrame("江苏省上半年肉类销量统计图",chart);
frame.pack();
frame.setVisible(
true);
}

}
这个执行后显示的是平面曲线图,如果想实现3D曲线图,只需要在创建JFreeChart对象时使用ChartFactory.createLineChart3D方法。
运行结果如下:
平面曲线图 3D曲线图

你可能感兴趣的:(jfreechart)