JFreeChart的应用开发与改进
通过代码实例跟我学JFreeChart 图表组件——在J2EE Web应用系统中采用J2EE JSP方式应用JFreeChart的实例
1.1通过代码实例跟我学JFreeChart 图表组件——在J2EE Web应用系统中采用J2EE JSP方式应用JFreeChart的实例1、新建一个Web项目2、安装其对应的API库的jar包文件将jfreechart-1.0.5.jar和jcommon-1.0.9.jar、gnujaxp.jar文件导入到Web应用程序的lib目录下。
将为下面的结果3、在该Web应用的web.xml文件中加入一个对DisplayChart 的Servlet的引用该Servlet是在jfreechart-1.0.0-pre2.jar中自带的Servlet,它主要是实现图表的Web方式的显示。
<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>/DisplayChartServlet</url-pattern></servlet-mapping>4、设计一个简单的Web页面以显示图形 index.jsp通过下面的页面,可以很好地了解jfree的编程的基本规则。
主要的实现步骤1)创建出某种形式的Dataset;2)然后利用该Dataset,创建出某种形式的Plot3)再根据Plot创建出JFreeChart对象,并根据应用的需要设置其各个属性4)最后再通过DisplayChartServlet实现将所创建出JFreeChart对象向客户端输出下面给出代码示例<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.data.general.DefaultPieDataset"%><%@ page import="org.jfree.chart.JFreeChart"%><%@ page import="org.jfree.chart.plot.PiePlot"%><%@ page import="org.jfree.chart.ChartRenderingInfo"%><%@ page import="org.jfree.chart.servlet.ServletUtilities"%><%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%><%@ page import="org.jfree.chart.entity.StandardEntityCollection"%><%DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java",100);dataset.setValue("C++",200);dataset.setValue("Basica",300);dataset.setValue("J2EE",400);dataset.setValue("",500);PiePlot plot = new PiePlot(dataset);JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT,plot, true);chart.setBackgroundPaint(java.awt.Color.white); //可选,设置图片背景色chart.setTitle("创建饼图的示例"); //可选,设置图片标题ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());//500是图片长度,300是图片高度String graphFileName =ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);String targetGraphURL ="/DisplayChartServlet?filename="+ graphFileName;RequestDispatcher dispatch = request.getRequestDispatcher(targetGraphURL);dispatch.forward(request, response);//由于是以Web应用程序作为相对路径,因此不需要request.getContextPath() +"/DisplayChartServlet?filename="+ graphFileName;%><HTML><HEAD> <TITLE>利用JFreeChart生成饼图</TITLE></HEAD><BODY></BODY></HTML>(1)部署该Web应用(2)输入测试页面的URL地址http://127.0.0.1:8080/JFreeChart/index.jsp,将出现下面的结果注意:此时将在Tomcat的Temp目录下此时一些图片文件而如果将本Web应用部署到JBoss服务器中,则是放在c:\winnt\temp目录下。
使用JfreeChart开发图表经验总结(含源码)
使用JfreeChart开发图表经验总结(含源码)使用JfreeChart开发图表经验总结(含源码)Keith He 2005年10月27日最近,公司一项目要出很多的图表。
由于项目是B/S架构的,所以生成的图表也要考虑能在浏览器上动态显示。
生成基于浏览器的图表方式比较多。
据我所知道的,常用的有三种:1、VML方式实现。
这种方式是通过产生客户端的代码,由客户端根据代码生成相应的图表。
但这种方式产生的图表有很多的局限性,如受限于浏览器,有些浏览器可能并不支持VML。
另外,没有封装完整的图表开发包。
2、通过applet来产生图表。
这种方式也对客户端要求比较高,必须要有JRE,而且通过applet生成的图表在加载过程中会有个Java的Log动画。
用户看了可能会感觉不太舒服。
3、通过服务端直接生成图表的图片。
这种方式对客户端几乎没有什么要求,缺点是加重了服务端的负担,对服务端要求就相对高了点。
经过比较,根据项目自身特点,我们打算采用第三种方式来开发图表。
为了缩短开发周期、节约成本,我们选用了开源的JFreeChart(/jfreechart/)。
jfreechart是一个免费创建图表的java工具,目前最新版本是JFreeChart-1.0.0-rc1。
它可以生成各式各样的图表。
这些图表包括饼图、柱状图、线形图、区域图、甘特图等等,基本可以满足各种项目的要求。
但在开发过程中我也发现了JFreeChart的一些不足,或者说有些称得上是BUG。
总体说来,JFreeChart还是个优秀的开源项目。
关于JFreeChart生成图表的文章比较多了,我主要谈谈使用JFreeChart的一些比较棘手问题以及解决方法。
同时也会将问题所用到的源码(JFreeChart-1.0.0-rc1+Struts1.2.4)从项目中抽象出来一起提供给大家。
一、图片上热点链接中文乱码的解决方法这个问题是在我查阅关于JFreeChart相关资料时出现频率最高的一个问题。
JFreeChart各个类的功能研究
JFreeChart各个类的常用方法的研究<一>JFreeChart 类这个类是JFreeChart的基础类,可以利用ChartFactory来生成不同的JFreeChart的具体类,相当于JFreeChart是所有图表的父类(1)setBackgroundImage(java.awt.Image image)给整个JFreeChart设置背景图片实现方式:JFreeChart jfreechart=ChartFactory.createBarChart(title,categoryAxisLabel,valueAxisLabel,dataset,legend,tooltips,urls);Java.awt.Image image =javax.imageio.ImageIO.read(new File("图片的路径"));//注意这里路径使用\\jfreechart.setBackgroundImage(image);//到这里的则给整个JFreeChart的外围设置了背景图片,但是没有给JFreeChart的内容设置背景图片CategoryPlot plot=jfreechart.getCategoryPlot();plot.setBackgroundPaint();//到这一步是对整个环境都设置了背景图片,但是针对不同的JFreeChart应该相应的获取它的plot(2)setBackgroundImageAlignment(int alignment)该方法的作用对于设置了的背景图片进行位置的调整(3)setBackgroundImageAlpha(float alpha)该方法的作用是对于设置了的背景图片的透明度进行修改(4)setBackgroundPaint(Color.white)该方法的作用是设置背景颜色,如果有背景图片,那么最终显示的就是背景图片和背景颜色的中和结果(5)setBorderPaint(Color.red)该方法的作用是设置JFreeChart的边框的颜色,但是前提是必须通过方法setBorderVisible(Boolean flag)来设置边框为可见效果如下图:可以看出围绕一周的红色的边框(6)setBorderVisible(Boolean flag)该方法的作用是设置JFreeChart的边框是否显示,该方法会限制setBorderPaint(java.awt.Paint paint)的显示效果(7)setBorderStroke(java.awt.Stroke stroke)该方法的作用是设置JFreeChart的边框的笔触的宽度,但是此方法和setBorderPaint一样会收到setBorderVisible的限制eg: setBorderStroke(new java.awt.BasicStroke(float f) )//需要注意的是Stroke只是一个interface,具体的实现类是BasicStroke (8)setPadding(org.jfree.ui.RectangleInsets insets)该方法的作用是设置JFreeChart在整个图片中的内补丁,实际上有点像是css 中padding的作用eg: setPadding(new org.jfree.ui.RectangleInsets(double top,double left,double bottom, double right)) 设置top为-10的话这个JFreeChart的显示如下图(9) setRenderingHints(java.awt.RenderingHints hints)用法不详eg: RenderingHints hints=new RenderingHints(RenderingHints.key,RenderingHints.key) (10)setSubtitles(java.util.List list)该方法的作用是给JFreeChart设置一组子标题eg:TextTitle texttitle =new TextTitle("阿里的工作状况1", new Font("Dialog", 2, 8));TextTitle texttitle1 =new TextTitle("阿里的工作状况2", new Font("Dialog", 2, 8));ArrayList list=new ArrayList();list.add(texttitle);l ist.add(texttitle1);jfreechart.setSubtitles(list);(11) setTextAntiAlias(ng.Object val)方法是设置文字的反锯齿功能,有锯齿的话似乎更清楚一点,这个得根据实际的情况来设定eg.setTextAntiAlias(true/false)eg: setTextAntiAlias(RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT) (12)setAntiAlias(Boolean flag)该方法可以使你的图画的边界与它的周围环境无缝相连eg:setAntiAlias(true/false)(13) setTitle(String title)该方法的作用是可以更改title,但是和setTitle(TextTitle title)方法的区别在于setTitle(String title)只有默认的一个字体样式,而是用方法setTitle(TextTitle title)可以更改字体样式(14) setTitle(TextTitle title)上面已做解释(15)addLegend(LegendTitle title)(16)addSubtitle(TextTitle title)该方法的作用是设置JFreeChart的子标题组TextTitle title=new TextTitle(“阿里的工作状况”,new Font(“dialoge”,0,8));jfreechart.addSubtitle(title);产生的效果如下图所示(17)addSubtitle(int index ,Title)//该方法的作用相当于在一个subtitle组成的list里面的任何一个位置添加subtitle(18)clearSubtitles()该方法的作用是清除所有的子标题(19) draw(java.awt.Graphics2D g2,java.awt.geom.Rectangle2D area)该方法的作用不详(20) drawTitle(Title t,java.awt.Graphics2D g2,java.awt.geom.Rectangle2D area,boolean entities) 该方法的作用不详(21)getCategoryPlot() 获得CategoryPlotgetBackgroundPaint() 获得背景色getBorderPaint() 获得边框的颜色getBorderStroke() 获得边框的笔触getBackgroundImage() 获得背景图片getBackgroundImageAlignment() 获得背景图片的位置getBackgroundImageAlpha() 获得背景图片的透明度getAntiAlias() 获得抗锯齿对象getLegend() 获得JFreeChart的分类提示信息getPadding() 获得paddinggetPlot() 获得plotgetRenderingHints() 获得鼠标上的提示信息getSubtitle() 获得子标题getSubtitleCount() 获得子标题的个数getTextAntiAlias() 获得文字的抗锯齿对象,目的是为了让文字更加清除getTitle() 获得标题getXYPlot() 获得XYPlot(22)isBorderVisible() 设置JFreeChart的边框是否显示<二>DefaultCategoryDataset类这个类适用于柱状图,线性图创建的过程如下DefaultCategoryDataset dataset=new DefaultCategroyDataset();dataset.addValue(value,rowKey,columnKey);(1)addValue(dataset.addValue(value, rowKey, columnKey));a)value ---------代表的是实际的数值,即图中参数1的柱子的高度b)rowKey-------代表的就是下面进行类型提示的部分,即图中参数2c)columnKey---代表的是坐标上的显示信息,即图中的参数3(2)clear()该方法的作用是清除dataset里的所有data信息(3) getColumnCount()该方法的作用是获取列的数量信息(4)getColumnIndex(parableKey key)该方法的作用是获取值为key的列(5)getColumnKey(int column)该方法的作用是获得指定列的列的信息(6)getColumnKeys()该方法和getColumnKey(int column)对应,但是是获取的所有Key的list (7)getRowCount()该方法的作用是获得行的总数(8)getRowIndex(int row)该方法的作用是获得指定行的信息(9)getValue(Comparable rowKey, Comparable columnKey)该方法的作用是获得对应的某一行,某一列的具体值但是这里要注意的是row和column分别表示的是什么含义该方法同getValue(int row,int column)的方法一致(10)incrementValue(double value, Comparable row, Comparable column)该方法的作用是给指定row名称和column名称的部分设置值为valueeg:如上图的话可以这样设置(DefaultCategoryDataset)dataset.incrementValue(150d,”事件单”,“未关闭”)这样就可以把row名称为事件单,column名称为未关闭的柱子的值设置为150,在上图中的呈现为第一根柱子的值更改为150了。
JfreeChart在Web中的研究和应用
JfreeChart在Web中的研究和应用摘要:图表是一种直观、形象显示数据的有效方式。
该文以实际项目中问题为需求,在分析了JFreeChart组件结构的基础上,详细介绍了其在J2EE平台开发应用于Web的动态统计图表的方法,该方法对此类图表的开发有很好的参考价值关键词:JFreeChart Java J2EE Web平台动态统计图表第一章引言WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。
传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。
但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。
为了能在Web浏览器上显示要求用户界面使用HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。
为了创建一个可以在Web浏览器上查看到图表一般有两种做法:第一种就是使用Applet利用Java本身对图形的支持来显示一个图表;第二种就是直接在Web服务器端生成好图表图片文件后发送给浏览器。
第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对Java的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。
因此Java的图表引擎JFreeChart用来产生基于Web的图表。
第二章 JFreeChart组件结构2.1 概述JFreeChart是JFreeChart公司组织开发的一种基于Java语言的图表开发技术。
基本能够解决目前的图形方面的需求,生成各种各样的统计图,包括饼状图、柱状图、折线图、分布图和混合图等。
它生成的图形可以以PNG和JPEG文件格式保存,向网络客户浏览器传送,也可以直接输出到屏幕上。
同时还可以与PDF和EXCEL关联,生成该格式的文件。
JFreeChart组件对绘制图表的细节进行了封装,它对外提供了绘制图形及设置图形属性的接口与方法。
java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)
各类统计程序实现杨方 531115121 矢量图的生成矢量统计图,即是以矢量图形格式生成、存在和输出的统计图。
这种统计图图形要素丰富、交互编辑简单、存储格式多样,打印输出方便,是GIS应用系统最优先选择的统计图。
最常用的三类矢量统计图是直方图、曲线图、饼图。
矢量统计图的生成,首先要将数据组织为一定的格式,然后进行图形参数的计算和设置,再生成图形,最后进行浏览显示或者保存输出。
当然,如果对生成的图形不满意,可以进行参数修改,然后重新生成,最后再显示或保存。
1.1 数据组织原始数据可以整理为二维表格的形式,通过文件(*.txt,*.xls,*.doc)导入,也可以将数据整理为二维数组的形式输入。
统计图只支持为数值型的数据,包括整型、长整型、浮点型和双精度型等4种数据类型。
1.2 设置参数图形参数可以由用户外部输入,也可以根据数据生成默认参数,分为基本参数、坐标参数、图例参数和数据参数等。
(1)基本参数包括图形类型,图形名称,图形范围,点、线、区参数等。
(2)坐标轴参数包括是否绘制轴线、刻度线、标注、网格线的标志,刻度数,颜色,名称,比例尺,以及是否绘制包围盒或箭头的标志。
(3)图例参数包括是否绘制图例的标志和图例显示位置标志。
(4)数据参数包括数据类型,是否绘制数据表的标志,图形单元的宽度或间隔、图形单元的颜色,系列和类别显示标志等。
1.3 图形生成生成图形的基本步骤如下:(1)确认存在点、线、面工作区。
生成的图形要暂时存入工作区中,然后才能进行显示或保存。
点线面工作区可以由外部输入,也可以在软件中生成。
(2)确认各项图形参数有效。
必须保证每项图形参数都有效,否则软件将出错。
对于没有设置有效值的参数,要重新设置默认参数。
(3)依次生成图形的各个要素:生成坐标轴、生成图形主体、生成数据表、生成图例和生成图形。
在生成统计图的过程中,要随时计算图形的当前范围,以控制后续元素的位置。
1.4 图形显示统计图生成后,保存在MAPGIS的点线面工作区中,可以调用MAPGIS的图形显示视图进行显示。
JFreeChart使用心得与例子
JFreeChart使用心得与例子一、JFreeChart的介绍与获取JFreeChart开发包是一个开源的Java图形开发包,它从柱形图,饼形图,到雷达图,蜡烛图等等无所不包,可以在c/s,b/s,甚至是实时环境都能一显身手。
当前的JFreeChart的最新版本为jfreechart-1.0.0-rc1.zip。
可以到[url]/jfreechart/index.html下载。
如果是进行web开发,把解压缩文件中的lib目录下jcommon-1.0.0-rc1.jar和jfreechart-1.0.0-rc1.jar放置到web应用程序的WEB-INF/lib 目录下;如果是Java开发,则加入到classpath环境变量中。
[/url]二、JFreeChart的基本使用不论创建的是什么图,JFreeChart都遵循以下的这个使用步骤:1、建立Dataset。
所有的数据都存放在Dataset中的。
(创建一个数据源(dataset)来包含将要在图形中显示的数据)2、建立JFreeChart。
将dataset中的数据导入到JFreeChart中。
(创建一个JFreeChart 对象来代表要显示的图形)3、设置JFreeChart的显示属性。
这一步可以省略,使用默认的JFreeChart显示属性。
3、渲染图表。
即生成图片。
4、页面图片显示。
重要的类和接口:org.jfree.data.general.Dataset 所有数据源类都要实现的接口org.jfree.chart.ChartFactory 由它来产生JFreeChart 对象org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整注意:它有很多子类,一般都下涉及到它的子类!org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。
Jfreechart开发文档
Jfreechart图形开发指南廊坊市大华夏神农信息技术有限公司2010年05月修订历史记录目录目录1.引言 (3)2.JFREECHART开发 (3)2.1绘制曲线图 (3)2.2绘制柱状图 (5)2.3绘制三维柱状图 (6)2.4绘制平面饼状图 (7)2.5绘制3D饼状图 (8)2.6绘制时序图 (9)2.7绘制甘特图 (11)3.依赖的JAR包 (13)1.引言JFreeChart是JAVA平台上的一个开放的图表绘制类库。
它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。
JFreeChart可生成饼图(pie chart s)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(G antt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EX CEL关联。
JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求。
2.jfreechart开发2.1绘制曲线图工具类< LineChart >示例代码:图样:2.2绘制柱状图工具类<BarChart>示例代码:图样:2.3绘制三维柱状图工具类<BarChart>示例代码:图样:2.4绘制平面饼状图工具类<PieChart>示例代码:图样:2.5绘制3D饼状图工具类<PieChart3D>示例代码:图样:2.6绘制时序图工具类< TimeSeriesChart> 示例代码:图样:2.7绘制甘特图工具类< TimeSeriesChart> 示例代码:图样:3.依赖的jar包。
JFreeChart开发步骤
JFreeChart开发步骤1:提供一个Dataset实例,该实例里包含了创建统计图表的数据。
提示:不同的统计图表所使用的Dataset实例不一样,例如,饼图使用PieDataset实例作为饼图数据;而柱状图则采用CategoryDataset作为柱状图数据。
2:使用ChartFactory的多个工厂方法createXxxChart来创建统计图表,统计图表就是一个JFreeChart对象。
例如:JFreeChart jfreechart = ChartFactory.createPieChart(”图形标题名称”,dataset /*数据*/ ,true /*是否显示图例*/ ,false /*是否显示工具提示*/ ,false /*是否生成URL*/);/*如果把createPieChart改成createPieChart3D,是3D效果*/3:得到了JFreeChart对象后,可以调用setTitle来修改统计图表的标题;或者调用getLegend方法来获得指定索引的图表图例,取得图例对象后即可修改图表的图例。
(如2中口号内的内容)4:通过JFreeChart对象的getPlot方法,即可获得图表的Plot对象,该对象对应于统计图表的实际图表部分,可以调用Plot对象的方法来修改图表中的各种显示内容。
按照以上4个步骤进行,即可快速开发出各种简单的JFreeChart图表.在上面步骤中,共涉及到JFreeChart的如下核心API:1)XxxDataset:这是一个数据集对象,用于提供显示图表所用的数据。
对于不同类型的统计图表,也需要使用不同的Dataset对象。
2)ChartFactory:该对象是一个图表工厂类,通过调用该工厂类的不同方法,即可生成不同的统计图表。
3)JFreeChart:统计图表对象,JFreeChart由如下3个部分组成:TextTitle(标题)、LegendTitle(图例标题)和XxxPlot(实际统计图)。
JFreeChart的应用开发与改进
图( a C a s 、 B r h ̄ )散点图(ct r l s 、 Sae P t 时序图( ieSr s 、 t o ) Tm e e)甘特图( atC a s 等等多种 图表, i G n hr ) t t 并且可
以产 生 P G和 JE N P G格式 的输 出 , 可 以与 P F和 E C L关联 ¨ 。 还 D XE
guap j ,jo o n jx .a cmm n一1 0 0 j ,j ecat—1 0 1 j 进 行 A pi t n开 发 , 拷 贝 到% J V r . . . a f eh r r r . . .a r p l ai c o 并 A A
H ME LB中。同 时 , O %/ I 将其 加入 环境 变量 C A S A H 中。Jrehr配 置成 功后 , L SP T FeC a t 就可 以进 行 A pi ・ pla c
中图分类 号 : P3 T 1
文 献标识 码 : A
0 引 言
Jr C a 是 Jv 平 台上的一个开放的图表绘制类库 , F e hr e t aa 它主要使用图表处理的 J a a 类库来绘制各种 v
各样 的 图表 。使用 Jre hr可 以极 大地 增 强 Jv 用程 序 的 高级 制 图功 能 。它完 全 使 用 Jv 语 言 编 FeC at aa应 aa 写 , 为 A piaos A pe , ev t 是 p l tn , plt Srls以及 Jp等使 用所 设计 。Jre hr可生成 饼 图 ( i C a s 、 状 ci s e s FeC at Pe h ̄ ) 柱
tn i 开发。图形可以导出成 P G和 JE o N P G格式 。在项 目中为了创建 We b图表应用 , e.m 文件必须配 wbx l
JFreeChart
JFreeChart组件可以生成各种各样的图形报表,如常用的
柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对 于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。
1页
JFreeChart的下载与使用
JFreeChart是开放源代码的图形报表组件(开源 站点上的一个Jave项目),其主页为 /jfreechart/index.html。
13页
Pie 所用的数据集:
PieDataset(接口):用于生成圆饼图的数据集类型 DefaultPieDataset:实现PieDataset接口,并用于绘制圆饼 图的必需数据集,它主要用于存储一些手动添加的数据集 defaultpiedataset.setValue(key, value) 用于向数据集中添加数 据 key:一般为该数据的来源名称 value:一般为double类型的数据
JFreeChart chart = ChartFactory.createBarChar t("xin", "Categry", "Value", getDataset(), PlotOrientation.VERTICAL, true, true, true);
19页
2.3、属性
JFreeChart chart = ChartFactory.createBarChart("统计", "Categry", "Value", getDataset(), PlotOrientation.VERTICAL, true, true, true); CategoryPlot是Plot类的子类,类主要用于描述CategoryDataset 数据集合类型的图表,它支持折线图、区域图等,其常用方法及说明: CategoryPlot cgplot = chart.getCategoryPlot(); //设置图表显示背景 cgplot.setBackgroundPaint(Color.blue); //横坐标网格线红色 cgplot.setDomainGridlinePaint(Color.red); //显示为可见 cgplot.setDomainGridlinesVisible(true); //纵坐标网格线红色 cgplot.setRangeGridlinePaint(Color.red); //设置横坐标与纵坐标的显示位置; cgplot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); cgplot.setRangeAxisLocation(AxisLocation.TOP_OR_RIGHT);
JFreeChart入门 - 使用JFreeChart开发Pie(饼状图)
本文介绍怎么样使用JFreeChart来开发一个Pie图(饼状图)。
测试环境OS:WindowsXPJava:jdk1.5.0_06JFreeChart:1.0.9(2008年3月最新版本)※因为JFreeChart采用Java开发而成,所以在其他系统也能正常运行。
JFreeChart Pie图的开发JFreeChart开发一个饼图非常简单,大致分以下三步:步骤1:创建PieDataset对象(准备数据)步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置步骤3:将JFreeChart对象输出到文件,Servlet输出流等Java代码:CreateJFreeChartPie.javaview plaincopy to clipboardprint?1.package com.syboos.demo.jfreechart;2.83.public static PieDataset createDataset() {84. DefaultPieDataset defaultpiedataset = new DefaultPieDataset();85. defaultpiedataset.setValue("One", new Double(37.800000000003D));86. defaultpiedataset.setValue("Two", new Double(20.002D));87. defaultpiedataset.setValue("Three", new Double(17.504D));88. defaultpiedataset.setValue("Four", new Double(47D));89.return defaultpiedataset;90. }91.92.}编译与执行执行以下操作:C:\Work\Download\JFreeChart\demos>javac -classpath .;jcommon-1.0.12.jar;jfreechart-1.0.9.jarcom/syboos/demo/jfreechart/CreateJFreeChartPie.javaC:\Work\Download\JFreeChart\demos>java-classpath .;jcommon-1.0.12.jar;jfreechart-1.0.9.jar com.syboos.demo.jfreechart.CreateJFreeChartPie C:\Work\Download\JFreeChart\demos>※参考:C:\Work\Download\JFreeChart\demos文件夹的阶层如下:jcommon-1.0.12.jarjfreechart-1.0.9.jarcom\syboos\demo\jfreechart\CreateJFreeChartPie.java执行后,可以发现生成了C:\jfreechart\pie.png文件===============================================================================一、jFreeChart产生图形的流程创建一个数据源(dataset)来包含将要在图形中显示的数据>>创建一个JFreeChart 对象来代表要显示的图形>>把图形输出重要的类和接口:org.jfree.data.general.Dataset 所有数据源类都要实现的接口org.jfree.chart.ChartFactory 由它来产生JFreeChart 对象org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整注意:它有很多子类,一般都下嗍造型到它的子类!org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。
通过实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)
1.1通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建时间序列图的应用实例(Eclipse开发工具版本)1.1.1创建时间序列图的应用实例时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。
时间序列图的dataset 是XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入TimeSeriesCollection 。
1、添加时间序列图的类类名称为TimeSeriesDemo、包名称为com.px1987.j2sejfreechart.demo2、创建一个数据源(dataset)的代码示例TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段3、由ChartFactory 类产生出JFreeChart类的对象实例的代码示例JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",oneXYDataset,true,true,false);jfreechart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));4、生成和输出图表(本地图像的保存)的代码示例FileOutputStream fos_jpg = null;String tempDirName=null,picFileName=null;try {File tempDir = new File(System.getProperty("java.io.tmpdir"));tempDirName = tempDir.getAbsolutePath();picFileName=tempDirName+"/timeSeries.jpg";fos_jpg = new FileOutputStream(picFileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,jfreechart,800,500,null);System.out.println("图表已经正确地保存到"+picFileName);}catch(IOException e){System.out.println("不能正确地保存"+picFileName);}finally{try {fos_jpg.close();}catch (Exception e){}}5、本示例完整的程序代码示例package com.px1987.j2sejfreechart.demo;import java.awt.Color;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.RectangleInsets;public class TimeSeriesDemo {public TimeSeriesDemo() throws IOException {JFreeChart timeSeriesChart = ChartFactory.createTimeSeriesChart("时间序列图示例","月份","每月的收入",createXYDataset(),true,true,false);timeSeriesChart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)timeSeriesChart.getPlot(); //获得 plot : XYPlot!!xyplot.setBackgroundPaint(Color.lightGray);xyplot.setDomainGridlinePaint(Color.white);xyplot.setRangeGridlinePaint(Color.white);xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));xyplot.setDomainCrosshairVisible(true);xyplot.setRangeCrosshairVisible(true);xyplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));File tempDir = new File(System.getProperty("java.io.tmpdir"));String tempDirName = tempDir.getAbsolutePath();String picFileName=tempDirName+"/timeSeries.jpg";writeImagetoFile(picFileName,timeSeriesChart);System.out.println("图表已经正确地保存到"+picFileName);}public static void main(String[] args) throws IOException {new TimeSeriesDemo();}private void writeImagetoFile(String fileName,JFreeChart oneJFreeChart) throws IOException{FileOutputStream fos_jpg = null;fos_jpg =new FileOutputStream(fileName);ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,oneJFreeChart,600,500,null);}private XYDataset createXYDataset() {TimeSeries timeseries = new TimeSeries("计算所培训中心",Month.class);timeseries.add(new Month(2, 2007), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等timeseries.add(new Month(3, 2007), 167.3D);timeseries.add(new Month(4, 2007), 153.8D);timeseries.add(new Month(5, 2007), 167.6D);timeseries.add(new Month(6, 2007), 158.8D);timeseries.add(new Month(7, 2007), 148.3D);timeseries.add(new Month(8, 2007), 153.9D);timeseries.add(new Month(9, 2007), 142.7D);timeseries.add(new Month(10, 2007), 123.2D);timeseries.add(new Month(11, 2007), 131.8D);timeseries.add(new Month(12, 2007), 139.6D);timeseries.add(new Month(1, 2008), 142.9D);timeseries.add(new Month(2, 2008), 138.7D);timeseries.add(new Month(3, 2008), 137.3D);timeseries.add(new Month(4, 2008), 143.9D);timeseries.add(new Month(5, 2008), 139.8D);timeseries.add(new Month(6, 2008), 137D);timeseries.add(new Month(7, 2008), 132.8D);TimeSeries timeseries1 = new TimeSeries("沈阳培训中心",Month.class); timeseries1.add(new Month(2, 2007), 129.6D);timeseries1.add(new Month(3, 2007), 123.2D);timeseries1.add(new Month(4, 2007), 117.2D);timeseries1.add(new Month(5, 2007), 124.1D);timeseries1.add(new Month(6, 2007), 122.6D);timeseries1.add(new Month(7, 2007), 119.2D);timeseries1.add(new Month(8, 2007), 116.5D);timeseries1.add(new Month(9, 2007), 112.7D);timeseries1.add(new Month(10, 2007), 101.5D);timeseries1.add(new Month(11, 2007), 106.1D);timeseries1.add(new Month(12, 2007), 110.3D);timeseries1.add(new Month(1, 2008), 111.7D);timeseries1.add(new Month(2, 2008), 111D);timeseries1.add(new Month(3, 2008), 109.6D);timeseries1.add(new Month(4, 2008), 113.2D);timeseries1.add(new Month(5, 2008), 111.6D);timeseries1.add(new Month(6, 2008), 108.8D);timeseries1.add(new Month(7, 2008), 101.6D);TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段return timeseriescollection;}}6、测试本示例目前的应用效果7、将出现下面的提示8、图表为下面的结果。
JFreeChart在项目开发中实现图形报表的应用探讨
Jr C a 是 一 个 Jv 开 源 项 目 ,是 一 款 优 秀 的 Fe hr e t aa Jv 图表 生成 工 具 ,它 不 仅 功 能 全 面 ,提 供 了 在 Jv aa aa A p ctn Sr e 和 JP下 生 成 各 种 图 片 格 式 的 图 pl ao ,e l i i vt S
利 用 Jr C a 可 以生 成 柱 形 图 、 形 图 、 线 图 Fe hr e t 饼 折
FI NANCI AL COM P UTE OF I U R I ANAN :
21年 4 0 第期 o
Q
利 用 Jr C at 件 生 成 动 态统 计 图 表 的基 本 步 Fe h r插 e
骤为 :
1 创建绘图数据集合 ; .
一
、
J re h r配黄 和部 署 Fe C at
2 创 建 Jre hr实 例 ; . FeC a t 3 .自定 义 图 表绘 制 属 性 , 步 可 选 ; 该 4 生 成指 定 格式 的 图片 , 返 回图 片名 称 ; . 并 5 组 织 图片 浏览 路 径 ; .
6 在 页面 上 显示 图片 。 .
( )F eC at 配 置 一 J re h r的
从 Jr C a 的 官方 网站 上 下载 到 该 工 具 , 下 载 Fe hr e t 将 文 件 解 压 缩 后 可 得 到 一 个 名 为 jecat1 . 文 件 f ehr . 5的 r 一 0 夹 ,将 l 子 文 件 夹 内 的文 件 复 制 到 We 用 程 序 目 i r l t a > s l y h r< s r l t n me e v e —n me Dip a C a t / e v e - a >
JFreechart教程与实例
以图形报表的形式对数据进行统计分析,其显示结果非常直观、清晰,查看者能够一目了然。
然而图表的制作非常繁琐,而且当数据发生变化时,需要对其进行重新绘制。
在Java语言中,JFreeChart组件为图形报表技术提供了解决方案。
JFreeChart组件用于绘制动态图表,其强大的功能、出色的制图效果及便捷的操作方法在Java领域中已得到一致的认可。
本章将向读者介绍JFreeChart组件的使用方法及常见动态图表案例。
通过阅读本章,您可以:了解动态图表掌握JFreeChart组件的制图方法掌握制图对象理解数据集合掌握常用绘图区对象类型及关系掌握坐标轴对象类型及关系掌握图片渲染对象了解JFreeChart组件的内置JDBC1 JFreeChart简介JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表。
在Java的图形报表技术中,JFreeChart组件提供了方便、快捷、灵活的制图方法。
1.1 认识JFreeChart组件作为一个功能强大的图形报表组件,JFreeChart为Java的图形报表技术提供了解决方案。
在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。
JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。
这些效果可以在下载JFreeChart组件后,通过运行JFreeChart提供的例子程序jfreechart-1.0.13-demo.ja进行查看,其运行后的效果如图24.1所示。
1.2 JFreeChart的下载与使用JFreeChart是开放源代码的图形报表组件(开源站点上的一个Jave项目),其主页为/jfreechart/index.html,如图24.2所示。
在主页中单击DOWNLOAD导航链接将进入下载页面,选择所要下载的JfreeChart版本即可进行下载,在本书编写时其最新版本为1.0.13,本章将以此版本为例进行讲解。
通过实例跟我学JFreeChart 图表组件——在J2SE Java应用系统中应用JFreeChart实例(JBuilder开发工具版本)
1.1通过代码实例跟我学JFreeChart 图表组件——在J2SE Java应用系统中应用JFreeChart的实例(JBuilder开发工具版本)1、在JBuilder开发工具中编程JFreeChart 的API的程序首先要引入JFreeChart 的API所在的*.jar 包文件——由于jfreechart-1.0.5.jar 和jcommon-1.0.9.jar、gnujaxp.jar文件不是在JBuilder的JDK中所内带的,因此,应该将该三个文件包含到JBuilder的库环境变量中。
2、配置JFreeChart系统库文件的主要步骤(1)选择Tools菜单下的Configure Libraries菜单(2)在对话框内点击“New”按钮,然后在新的对话框内的名称栏:JFreeChartJar,在Location 中:User Home;然后点击“Add”按钮将JFreeChart的两个主要的jar包文件jfreechart-1.0.0-pre2.jar和jcommon-1.0.0-pre2.jar包含到本库中。
(3)点击“OK”按纽以添加。
3、创建PieChartDemo.java程序类(1)在JBuilder中创建一个使用JFreeChart的Java程序程序类名称为PieChartDemo.java,程序包名称为com.px1987.j2sejfreechart.demo。
(2)编程PieChartDemo.java的功能实现程序代码package com.px1987.j2sejfreechart.demo;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.data.general.DefaultPieDataset;public class PieChartDemo {public PieChartDemo() {}public static void main(String[] args) {PieChartDemo one=new PieChartDemo();JFreeChart oneJFreeChart=one.createOneChart();String chartFileName="myPie.jpeg";one.outPutOneChart(chartFileName, oneJFreeChart);}private DefaultPieDataset getDataSet(){DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("Java",100);dataset.setValue("C++",200);dataset.setValue("Basica",300);dataset.setValue("J2EE",400);dataset.setValue("",500);return dataset;}private JFreeChart createOneChart(){/*JFreeChart oneJFreeChart=ChartFactory.createPieChart3D("创建饼图的示例", // 图表标题getDataSet(), true, // 是否显示图例false, // 是否显示tooltipsfalse); //是否显示URLs*/JFreeChart oneJFreeChart=ChartFactory.createPieChart("XXX学校的选课结果", // 图表标题getDataSet(), true, // 是否显示图例true, // 是否显示tooltipstrue); //是否显示URLs/* PiePlot pieplot = (PiePlot)oneJFreeChart.getPlot(); //通过JFreeChart 对象获得PiePlot,然后对它进行修改和定制pieplot.setNoDataMessage("没有合适的图表的数据"); // 没有数据的时候显示的内容*/return oneJFreeChart;}private boolean outPutOneChart(String chartFileName,JFreeChart oneJFreeChart){FileOutputStream fos_jpg = null;File tempDir =null;try {tempDir = new File(System.getProperty("java.io.tmpdir"));String tempDirName = tempDir.getAbsolutePath();String picFileName=tempDirName+"/"+chartFileName;fos_jpg = new FileOutputStream(picFileName);ChartUtilities.writeChartAsJPEG(fos_jpg, oneJFreeChart, 500,400);}catch(IOException e){System.out.println(" 在保存图时出现了错误,并且错误内容为"+e.getMessage());return false;}return true;}}4、编译和执行本示例程序5、将产生出下面的结果或者2D。
通过实例跟我学JFreeChart 图表组件——在 Web应用中采用JSP+JavaBean方式应用JFreeChart的实例(第3部分)
1.1通过代码实例跟我学JFreeChart 图表组件——在J2EE Web应用系统中采用JSP+JavaBean方式应用JFreeChart的实例(第3部分)1.1.1JSP+JavaBean的方式来生成Web图表,从而实现表示与业务分离下面提供一个命令模式构造的实现画图表的业务功能JavaBean程序。
1、设计命令模式的命令接口(1)接口名称为WebChartCommandInterface,包名称为com.px1987.jfreechart.model(2)设计该接口package com.px1987.jfreechart.model;import javax.servlet.http.HttpSession;import javax.servlet.jsp.*;public interface WebChartCommandInterface{public String generateSomeChart(String chartTitleString,String categoryName,String numberString, HttpSession session,JspWriter out) throws java.io.IOException;}2、设计命令模式的命令接口WebChartCommandInterface的各个实现类-----也就是我们的具体画出各种不同图形的JavaBean(1)实现平面饼图的PieChartBean类,包名称为com.px1987.jfreechart.model(2)编程PieChartBean 程序类中的相关功能方法package com.px1987.jfreechart.model;import javax.servlet.http.HttpSession;import org.jfree.data.general.DefaultPieDataset;import org.jfree.chart.JFreeChart;import org.jfree.chart.ChartUtilities;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.plot.PiePlot;import bels.StandardPieToolTipGenerator;import org.jfree.chart.entity.StandardEntityCollection;import org.jfree.chart.urls.StandardPieURLGenerator;import org.jfree.chart.servlet.ServletUtilities;import javax.servlet.jsp.*;import java.io.*;public class PieChartBean implements WebChartCommandInterface{private String graphFileName = null;public PieChartBean(){}public String generateSomeChart(String chartTitleString,String categoryName, String numberString,HttpSession session,JspWriter out) throws java.io.IOException{PrintWriter pw=new PrintWriter(out);DefaultPieDataset pieDatasetData =new DefaultPieDataset();pieDatasetData.setValue("六月",500);pieDatasetData.setValue("七月",580);pieDatasetData.setValue("八月",828);try{PiePlot plot = new PiePlot(pieDatasetData);plot.setToolTipGenerator(new StandardPieToolTipGenerator()); //在图形上产生tooltip文字plot.setURLGenerator(new StandardPieURLGenerator("WebChartHelp.jsp")); //在图表上产生超链接JFreeChart pieChart = new JFreeChart(chartTitleString,JFreeChart.DEFAULT_TITLE_FONT,plot,true);pieChart.setBackgroundPaint(java.awt.Color.white); //可选,设置图片背景色ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());/*选择存储成png格式的文件,当然你也可以使用saveChartAsJPEG的方法生成jpg图片saveChartAsPNG方法主要用于把图形对象JFreeChart以图片的形式保存。
Jfreechart 图表开发文档
Jfreechart 图表开发文档目标简介:只要按要求写好sql 语句就能生成相应的图表。
实现步骤:1.置图表属性2.写sql 语句3.取图表数据对象4.生成图表5.显示图表详细说明:1.置图表属性图表属性类中定义了图表的属性信息,如,图表标题,图表热链接,是否3D效果显示code:String title = "统计图2";ChartProperty cp = new ChartProperty(title);cp.setChart3D(false);cp.setHitUrl("/servlet/_test");2.写sql 语句sql语句要求:饼型图,柱型图要求sql 语句的select 字段,第一个为String 型,第二个为number 型,曲线图第一个字段要求为日期型,第二个字段为number型,可以有第三个字段,第四个字段…..(n个)这个可生成多曲线图表。
code:1.String sql = "select basepricetype, sum(saleprice)" +" from tb_builsrc_contractinfo" +" where affirm_date >= to_date('2004-06-01', 'yyyy-MM-dd') and" +" affirm_date <= to_date('2004-06-02', 'yyyy-MM-dd')" +" group by basepricetype";2.sql = "select affirm_date, baseprice, saleprice" +" from tb_builsrc_contractinfo" +" where affirm_date >= to_date('2004-06-01 00:00:00', 'yyyy-MM-dd HH24:mi:SS') and " +" affirm_date <= to_date('2004-06-01 23:59:59', 'yyyy-MM-dd HH24:mi:SS')" +" order by affirm_date ";3.取图表数据对象生成不同图表所在生成的jfreechart 数据对象不同,jfreechart提供三个接口,饼型图为,PieDataset,要柱型图为CategoryDataset, 曲线图为XYDataset,同时在交易系统包中提供有DbChartCenter类,静态封装生成不同图表。
JFreeChart生成各种统计图小结
1 柱状图
org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、
createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,
C)org.jfree.chart.servlet.ServletUtilities有一系列方法,
例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,
用于把文件流发送response。
下面以柱状图和饼图为例,介绍图形创建方法。
象。C)org.jfree.chart.servlet.ServletUtilities有一系列方法,例如,
saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,
用于把文件流发送response。下面以柱状图和饼图为例,介绍图形创建方法。
通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文件。JFreeChart主要是由三个类构成:A)
org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session关闭时,
删除临时目中的图象文件。B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet用于处理显示图
JFreeChart生成各种统计图小结
JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第28卷 第4期2008年12月西安科技大学学报JOURNAL OF XI′AN UN I V ERSI TY OF S C I E NCE AND TECHNOLOGYVol.28 No14Dec12008 文章编号:1672-9315(2008)04-0789-04JFreeChart的应用开发与改进3朱贺新,穆 荣,卢建军(西安科技大学通信与信息工程学院,陕西西安710054)摘 要:WWW技术的发展使得基于因特网的应用程序更加复杂,并且不再局限于静态内容。
为了能在W eb浏览器上实现动态统计图表,以图片的方式来显示用户界面的数据,介绍了Java平台下实现专业质量图表的开源项目JFreeChart,研究了JFreeChart的配置和安装,并阐述了其核心类、接口函数以及图表显示原理。
根据JFreeChart应用开发,提出的基于HT ML的MAP数据流程可实现具有可交互功能的图像。
最后,指出了JFreeChart存在的不足以及改进的方法。
关键词:JFreeChart;Java;饼图中图分类号:TP31 文献标识码:A0 引 言JFreeChart是Java平台上的一个开放的图表绘制类库,它主要使用图表处理的Java类库来绘制各种各样的图表。
使用JFreeChart可以极大地增强Java应用程序的高级制图功能。
它完全使用Java语言编写,是为App licati ons,App lets,Servlets以及J s p等使用所设计。
JFreeChart可生成饼图(Pie Charts)、柱状图(Bar Charts)、散点图(Scatter Pl ots)、时序图(Ti m e Series)、甘特图(Gantt Charts)等等多种图表,并且可以产生P NG和JPEG格式的输出,还可以与P DF和EXCE L关联[1]。
WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。
互联网技术的飞速发展使得基于W eb的应用越来越普遍,同时也更加复杂。
基于W eb的动态统计图表就是一个典型的实例[2]。
创建一个能在W eb浏览器上看到图表的方法一般有2种:第1种就是使用App let利用Java 本身对图形的支持来显示一个图表;第2种就是直接在W eb服务器端生成好图表图片文件后发送给浏览器。
第1种方式显然对于客户端要求太高,在主流浏览器放弃对Java的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合[3]。
因此,开源的基于Java的报表开发组件JFreeChart 引擎用来产生基于W eb的图表。
1 JfreeChart配置与安装JFreeChart是开放源代码站点上的一个Java项目,是目前最好的Java图形解决方案,基本能够解决目前图形方面的需求。
从JFree官方网站上下载Jfreechart1.0.1.zi p文件后解压。
其中s ource是JFreeChart的源码,jfreechart-1.0.1-demo.jar是例程。
将jfreechart-1.0.1/lib中的3个文件gnujaxp.jar,jcommon-1.0.0.jar,jfreechart-1.0.1.jar进行App licati on开发,并拷贝到%JAVA HOME%/L I B中。
同时,将其加入环境变量CLASSP AT H中。
JFreeChart配置成功后,就可以进行App lica2 ti on开发。
图形可以导出成P NG和JPEG格式。
在项目中为了创建W eb图表应用,web.x m l文件必须配置D is p layChart。
JFreeChart的机制是把图表保存为图片,然后在W eb页上链接图片(当然也可以通过App let在W eb 3收稿日期:2007-06-06 责任编辑:郭西山作者简介:朱贺新(1983-),女,河南南阳人,在读硕士研究生,主要从事宽带通信网和电子商务的研究.上显示图表)。
一般的创建图表过程为:首先,从数据库里读取数据;然后,将数据保存到图表对应的数据集对象中[4];接着,创建坐标轴对象;建Renderer 对象;创建Pl ot 对象;最后,创建JfreeChart 对象,生成图片文件(或者二进制流)。
2 JFreeChart 应用开发JFreeChart 是基于Java 平台的免费图表库。
它运行在Java2(JDK 1.2.2或更高版本)平台上,并且使用Java 2D AP I 进行制图。
最新的版本是可以从htt p://www .jfree .org/jfreechart/下载到。
2.1 JFreeChart 核心类1)org .jfree .chart .JFreeChart:图表对象,任何类型图表的最终表现形式都是通过对该对象进行一些属性的定制。
JFreeChart 引擎本身提供了一个工厂类(ChartFact ory,由它来产生JFreeChart 对象),用于创建不同类型的图表对象。
2)org .jfree .data .category .XXXDataSet:数据集对象,用于提供显示图表所用的数据。
根据不同类型的图表对应着很多类型的数据集对象类。
常用的数据集对象有柱状图数据集对象(Default Category Data 2set )、饼图数据集对象(DefauldPie Dataset )和曲线图数据集对象(DefaultTableXY Dataset )。
3)org .jfree .chart .p l ot .XXXPl ot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis,Renderer 以及数据集对象的支持。
常用的Pl ot 对象有柱状图(CategoryPl ot )、饼图(PiePl ot )和曲线图(XYPl ot )。
4)org .jfree .chart .axis .XXXAxis:用于处理图表的纵轴和横轴。
常用的有数据轴(Number Axis )和日期轴(Date Axis )。
5)org .jfree .chart .render .XXXRender:负责如何显示一个图表对象。
常用的Renderer 有柱状图显示器(Default CategoryIte mRenderer )和曲线图显示器(StandardXYIte mRenderer )。
6)org .jfree .chart .urls .XXXURLGenerat or:用于生成W eb 图表中每个项目的鼠标点击链接。
2.2 主要接口1)所有数据源类都要实现的接口:org .jfree .data .general .Dataset .2)产生JFreeChart 对象:org .jfree .chart .ChartFact ory .3)对图形外部部分(例如坐标轴)进行调整:org .jfree .chart .p l ot .Pl ot,通过JFreeChart 对象获得它。
4)对图形内部部分(例如折线的类型)调整:org .jfree .chart .renderer .Abstract Renderer,通过JFreeChart 对象获得它。
同样,针对不同类型的报表图,它有着不同的子类实现。
3 JFreeChart 应用开发举例很多情况下,不仅仅要求可以在浏览器上显示一个图表,更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。
为此就要求该图形具有交互操作的功能[5]。
在HT ML 中为了让一个图像具有可交互的功能必须给该图像定义一个Map 对象。
图1 JFreeChartMAP 数据流程图Fig .1 MAP data fl ow of JFreeChart 如图1所示,Chart U tilities 类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。
这个流程简单描述如下:首先创建一个Char 2t RenderingI nf o 对象并在调用Chart U tilities 的write 2Chart A s JPEG 时作为最后一个参数传递进去。
调用该方法结束后将产生一个图像文件以及一个填充好MAP 数据的Chart RenderingI nfo 对象,有了这个对象还没有办法获取具体的MAP 数据,还必须借助于Chart U tilities 的write I m age Map 方法来将Chart Ren 2deringI nf o 对象读取出来[6]。
以一个简单的饼图流程097 西安科技大学学报 2008年 第4期朱贺新等:JFreeChart 的应用开发与改进(图2)为例,说明JFreeChart 生成图表的应用过程。
4 结 论JFreeChart 完全实现了一个抽象的图形对象的具体化,它是目前是比较好的Java 图形解决方案,基本能够解决目前在图形方面的需求[7]。
图2 JFreeChar 饼状图程序流程Fig .2 Pr ogra m fl ow of JFreeChart PieChart JFreeChart 默认字体对中文的支持不完善,使用中文的时候字体不清晰,特别是中文Label 显示比较模糊。
JFreeChart 向下兼容性不好,无简体中文Localizati on Bundle .p r operties 文件,项目本身的类结构的设计并不是很好[8]。
首先,在创建图表的时候用到了大量的工厂方法,这样做虽然可以简化创建图表对象的代码,但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情[9];其次,除图表对象本身外其余的类过于复杂,使用者必须去了解每个类型的图表对象应该对应哪些Axis,Pl ot,Renderer 类,并且必须非常熟悉这些类在构造函数中每个参数的具体含义。
这些问题都大大困扰很多初学者。
不过,这些问题都可以通过Hacking JFreeChart 解决[10]。
不过,虽然存在很多问题,但是JFreeChart 本身仍不失为一个非常优秀的图表引擎,况且项目本身也在逐渐的发展中。
参考文献 References [1] 李村合,张培颖.基于J2EE 的Java 绘图方法研究与实现[J ].微计算机应用,2005,26(4):449-451.L I Cun 2he,ZHANG Pei 2ying .Study and i m p le mentati on of p l otting method using Java based on J2EE [J ].M icr ocomputer Ap 2p licati ons,2005,26(4):449-451.[2] 李 茜,毕 茹,李光明.W eb 与数据库交互的关键技术与实现[J ].西安科技大学学报,2003,23(3):302-304.L IQ ian,B I Ru,L I Guang 2m ing .The key technol ogy and realizati on of interactive bet w een W eb and database [J ].Journal of Xi ′an University of Science and Technol ogy,2003,23(3):302-304.[3] 李伯宇,赵丽丽.在JSP 中实现动态图表方法研究[J ].计算机应用,2003,23(6):213.L IBo 2yu,ZHAO L i 2li .The research of dyna m ic chart ′s realizati on in JSP[J ].Computer App licati ons,2003,23(6):213.[4] 王晓路,卢建军,马 莉.基于JAVA 的连接池优化W eb 数据库连接[J ].西安科技大学学报,2005,25(2):228-231.WANG Xiao 2lu,LU J ian 2jun,MA L i .Connecti on pool op ti m izati on of web database connecti on based on JAVA [J ].Journal of Xi ′an University of Science and Technol ogy,2005,25(2):228-231.[5] V ivek Chop ra,Jon Eaves,Rupert Jones .JSP 高级程序设计[M ].朱涛江,张文静,译.北京:人民邮电出版社,2006.V ivek Chop ra,Jon Eaves,Rupert Jones .Advanced p r ogra m design of JSP [M ].ZHU Tao 2jiang,ZHANG W en 2jing,inter p re 2ted .Beijing:Posts &Telecom Press,2006.[6] 顾晓刚,谢义军,林 锐.高质量Java 程序设计[M ].北京:电子工业出版社,2003.G U Xiao 2gang,X I E Yi 2Jun,L I N Rui .H igh quality p r ogra m design of Java [M ].Beijing:Publishing House of Electr onics I n 2dustry,2003.[7] HarveyMDeitel,Paul JDeitel .Java 程序设计教程[M ].袁兆山,刘宗田,苗沛荣,译.北京:机械工业出版社,2004.HarveyMDeitel,Paul JDeitel .Pr ogra m design tut orial of Java [M ].Y UAN Zhao 2shan,L I U Zong 2tian,M I A O Pei 2r ong,inter 2p reted .Beijing:China M achine Press,2004.[8] 耿祥义,张跃平.Java 实用教程[M ].北京:清华大学出版社,2002.GE NG Xiang 2yi,ZHANG Yue 2p ing .Practical tut orial of Java[M ].Beijing:Tsinghua University Press,2002.[9] Bergsten H.JSP 设计[M ].何健辉,许俊娟,译.北京:中国电力出版社,2002.Bergsten H.The design of JSP [M ].HE J ian 2hui,XU Jun 2juan,inter p reted .Beijing:China Electric Power Press,2002.[10]向学哲.JSP 程序设计教程[M ].北京:人民邮电出版社,2006.X I A NG Xue 2zhe .Pr ogra m design tut orial of JSP[M ].Beijing:Posts &Telecom Press,2006.197 297 西安科技大学学报 2008年 Appli cati on develop ment and i m prove ment of JFreeChartZHU He2xin,MU Rong,LU J ian2jun(College of Co mm unication and Infor m ation Engineering,X i′an U niversity of Science and Technology,X i′an710054,China) Abstract:W ith the devel opment of WWW technol ogy,the app licati on based on I nternet becomes more and more co mp licated,and is no more li m ited t o static data.T o realize dyna m ic statistic chart on W eb2 br owser,dis p lay user interface data by p icture,the open s ource p r ogra m of JFreeChart t o realize p r ofes2 si onal quality charts in Java is intr oduced,and it’s configurati on and installati on is researched,then it’s core classes,interface functi on and the dis p lay theory of JFreeChart is described.According t o the ap2 p licati on and devel opment of JFreeChart,the MAP data fl ow t o get interactive p icture based on HT ML is p r oposed.Finally the existing li m itati ons and the way t o i m p r ove is analyzed.Key words:JFreeChart;Java;PieChart B i ography:Z HU He2xin,Candidate forM.D.,Xi′an710054,P.R.China,Tel:0086-150********,E2mail:zhuhexin@(上接第748页)Control of ar m2dr i ven i n verted pendulu m syste mby usi n g opti m u m controlli n g methodHE L ian2yun(School of M echanical and Electrical Engineering,D ezhou U niversity,D ezhou253015,China) Abstract:The ar m2driven inverted pendulu m is a ty p ical nonlinear and unstable syste m.The analytic model of the ar m2driven inverted pendulu m is derived in this paper.The double types op ti m u m con2 tr oller of the inverted pendulu m is researched and si m ulati on results are got byMAT LAB by using op ti2 mu m contr oller.The si m ulati on experi m ents de monstrate the contr ol p r ogra mme is feasible.Key words:ar m2driven inverted pendulu m;op ti m um contr oller;MAT LAB si m ulati on B i ography:HE L ian2yun,A ss ociate Pr ofess or,Dezhou253015,P.R.China,Tel:0086-131********,E2mail:helianyun@(上接第752页)is expensive.This paper has analyzed its sche me and p rinci p le,designed its contr ol method and mech2 anis m of status change.Module of operati on and dis patch strategy are given t o decrease difficulty of de2 vel opment and ensure its devel opment quality.Finally,p r ovided graph of out put voltage,which is very cl ose t o standard sine,therefore it can meet use needKey words:m iddle voltage VVF;multi2voltage2level;standard sine;s oft w are module。