JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱
状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
简单介绍:
一.各种类型的图标介绍:
pie charts (2D and 3D):饼图(平面和立体)
bar charts (regular and stacked, with an optional 3D effect):柱状图
line and area charts:曲线图
time series, high/low/open/close charts and candle stick charts:时序图
图形可以导出成PNG和JPEG格式
二.图表的生成原理:
将生成的JFreeChart对象,以流的形式生成用PNG格式或JPEG格式系统临时文件,然后就可以被访问请求。
三.在实现图表生成中可能用到的接口与类
org.jfree.chart.JFreeChart:图表对象类
org.jfree.data.category.XXXDataSet:数据集对象类
org.jfree.chart.plot.XXXPlot图表区域对象类
org.jfree.chart.axis.XXXAxis:轴对象类
org.jfree.chart.render.XXXRender:修饰刷对象类
四.简单开发步骤如下:
1.导入需要的jar包:jfreechart-1.0.3.jar、 jcommon-1.0.6.jar
2.在/WEB-INF/web.xml文件中加入
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
3.Dataset对象的创建生成
JFreeChart对象的创建生成
URLGenerator的控制生成
4.例子(以柱状图为例):
1)浏览器中访问:
-
先构建Dataset对象:
double[][] data={{672,234,543,434,123},{432,876,234,745,254},{333,444,555,654,123}};
String[] rowKeys={"苹果","草莓","香蕉"};
String[] columnKeys={"北京","上海","天津","四川","内蒙古"};
CategoryDataset cateData=DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);
- 然后构建 JFreeChart对象:
JFreeChart chart=ChartFactory.createBarChart3D("水果销量图统计","水果","产量",cateData,PlotOrientation.VERTICAL,true,false,false);
- 最后获得url:
String filename=ServletUtilities.saveChartAsPNG(chart,500,400,null,session);
String url=request.getContextPath()+"/servlet/DisplayChart?filename="+filename;
- 在页面上用标签<img src="<%=url%>">显示图表。
2)本地生成图片文件:
-
先构建Dataset对象:
double[][] data={{672,234,543,434,123},{432,876,234,745,254},{333,444,555,654,123}};
String[] rowKeys={"苹果","草莓","香蕉"};
String[] columnKeys={"北京","上海","天津","四川","内蒙古"};
CategoryDataset cateData=DatasetUtilities.createCategoryDataset(rowKeys,columnKeys,data);
- 然后构建 JFreeChart对象:
JFreeChart chart=ChartFactory.createBarChart3D("水果销量图统计","水果","产量",cateData,PlotOrientation.VERTICAL,true,false,false);
- 生成图片:
FileOutputStream fos_jpg = null;
fos_jpg = new FileOutputStream("D://fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300,
null);(记得关闭文件输出流)
例子所产生的图标如首行所示: