使用 JFreeChart来创建基于web的图表.DOC
基于JFreeChart的Web图形开发
在Web中开发图形显示功能,在一些管理信息系统是比较常用的。
有些系统中使用调用office的ocx组件的方式来显示图形,这要求客户端必须要安装有office软件,那么有没有别的方法实现呢?JDK中带有图形开发的软件包AWT,然而,从事应用软件系统开发的程序员并非图形图像方面的专家,短时间内也无法掌握JDK中AWT的开发,需要了解的底层API也比较多。
因此,可以考虑使用比较成熟的第三方的组件包来实现。
JFreeChart是一个开源的组件包,它提供了Java中常用统计图形的快速开发API,程序员只要掌握少量的接口就能绘制出漂亮的图形,而且这些图形不仅可用于带有客户端界面的Java应用程序中,也可以是在JSP, Servlet, Java Applet中。
本章中将主要介绍在JSP中如何使用JFreeChart组件包开发常用的图形,如果要在Servlet、应用程序或Java Applet中实现类似的功能,可自行参考编程程序。
JFreeChart可用于创建饼图、线图、柱状图、散点图、甘特图等,本章将重点介绍常用的前三种图形的实现。
可以从如下的网址得到许多有关于JFreeChart的信息:/jfreechart/本书使用的JFreeChart版本是1.0.1,可从如下的网址下载得到:/jfreechart/jfreechart-1.0.1.zip? download要在JSP 中用JFreeChart开发Web图表,需要将JFreeChart的zip压缩包解压,在解压后的压缩包的lib子目录中,将gnujaxp.jar, jcommon-1.0.0.jar, jfreechart-1.0.1.jar三个jar包拷贝到Web应用的WEB-INF/lib目录下,即可在JSP中使用JFreeChart了。
一、主要相关类介绍JFreeChart组件包中的类相当之多,需要对图形越多的个性化设置或要开发越复杂的图形,就需要了解这些组件包中更多的类及其API。
通过代码实例跟我学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目录下。
WEB图表开发系列一:使用JFreeChart生成热点图表
WEB图表开发系列一:使用JFreeChart生成热点图表<一>前言:JFreeChart是开放源代码站点上的一个JAVA项目。
它的功能十分强大,能创建饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等,并可生成PNG或JPG图片格式文件。
本人在学习过程中发现,网上很多文章都是讲一些JFreeChart的基本应用,而对JFreeChart生成热点图表这样常用的功能虽有所提及却没有一个完整的例子,所以我就写一个简单示例供大家参考,希望对大家的学习有所帮助。
<二>示例说明:假设有一个关于程序员北京,上海,广洲三地程序员学历,开发语言,薪金情况的调查。
首先要以饼图显示程序员学历的分布情况(index.jsp)。
点击饼图的每一部分会以柱状图显示该层次程序员所用开发语言和薪金的情况(barview.jsp)。
重点演示怎样在饼图上添加链接。
<三>准备工作:1.下载最新版本的JFreeChart,当前为jfreechart-1.0.0-rc1下载地址:/jfreechart/index.html2.解压文件,将jfreechart-1.0.0-rc1/lib下的jcommon-1.0.0-rc1.jar,jfreechart-1.0.0-rc1.jar复制到WEB应用的lib目录下。
3.在web.xml文件中增加以下内容:1.<servlet>2.<servlet-name>DisplayChart</servlet-name>3.<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>4.</servlet>5.<servlet-mapping>6.<servlet-name>DisplayChart</servlet-name>7.<url-pattern>/servletDisplayChart</url-pattern>8.</servlet-mapping><四>饼图页面代码(index.jsp)1.<%@ page contentType="text/html;charset=GBK"%>2.<%@ page import="org.jfree.data.general.DefaultPieDataset"%>3.<%@ page import="org.jfree.chart.*"%>4.<%@ page import="org.jfree.chart.plot.*"%>5.<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>6.<%@ page import="bels.StandardPieItemLabelGenerator"%>7.<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>8.<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>9.<%@ page import="java.io.*"%>10.<HTML>11.<HEAD>12.<META http-equiv=Content-Type content="text/html; charset=GBK">13.<TITLE>nacl_zhuang@</TITLE>14.</HEAD>15.<BODY>16.<%17.18.DefaultPieDataset data = new DefaultPieDataset();19.data.setValue("高中以下",370);20.data.setValue("高中",1530);21.data.setValue("大专",5700);22.data.setValue("本科",8280);23.data.setValue("硕士",4420);24.data.setValue("博士",80);25.26.PiePlot3D plot = new PiePlot3D(data);//3D饼图27.plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接28.JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);29.chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色30.chart.setTitle("程序员学历情况调查表");//可选,设置图片标题31.plot.setToolTipGenerator(new StandardPieItemLabelGenerator());32.StandardEntityCollection sec = new StandardEntityCollection();33.ChartRenderingInfo info = new ChartRenderingInfo(sec);34.PrintWriter w = new PrintWriter(out);//输出MAP信息35.//500是图片长度,300是图片高度36.String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);37.ChartUtilities.writeImageMap(w, "map0", info, false);38.39.String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="+ filename;40.41.%>42.43.<P ALIGN="CENTER">44.<img src="<%= graphURL %>"width=500 height=300 border=0usemap="#map0">45.</P>46.</BODY>47.</HTML>生成的图片如下在浏览器中点右键->查看源文件会发现有以下一段HTML代码:1.<map id="map0"name="map0">2.<area shape="poly"coords="247,61,250,61,250,123,250,123"title="博士= 80"alt=""href="barview.jsp?category=博士&pieIndex=0"/>3.<area shape="poly"coords="148,112,153,102,160,92,170,83,182,76,196,70,212,65,229,62,247,61,250,123,250,123"title="硕士= 4,420"alt=""href="barview.jsp?category=硕士&pieIndex=0"/>4.<area shape="poly"coords="324,167,311,173,297,179,282,182,266,185,250,186,234,185,217,183,202,179,188,173,175,167,165,159,1 57,151,151,142,147,132,146,122,148,112,250,123,250,123"title="本科= 8,280"alt=""href="barview.jsp?category=本科&pieIndex=0"/>5.<area shape="poly"coords="307,72,324,80,338,91,347,103,352,117,352,131,347,144,338,156,324,167,250,123,250,123"title="大专= 5,700"alt=""href="barview.jsp?category=大专&pieIndex=0"/>6.<area shape="poly"coords="261,62,285,65,307,72,250,123,250,123"title="高中= 1,530"alt=""href="barview.jsp?category=高中&pieIndex=0"/>7.<area shape="poly"coords="250,61,261,62,250,123,250,123"title="高中以下= 370"alt=""href="barview.jsp?category=高中以下&pieIndex=0"/>8.</map>这就是MAP信息,我们在IMG标签中加入usemap="#map0"就可以为饼图的每一部分加入链接。
使用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 的主要类 和接口 1、JFreeChart 类
JFreeChart 库中最重要的类之一是它本身 ,名为 JFreeChart。该类提供一种 Java 二 维图表的表示。利用该类上的方法,开发人 员可以控制生成的图表的各个方面,并可以 创建表示图表的抽象窗口工具包 (AWT) BufferedImage。您只需非常少的额外工作即 可直接使用 JFreeChart 创建几种简单的图表 类型,但 JFreeChart 却可以提供对代表(如 允许对所生成的图表进行更多控制的 Plot) 的访问。
JFreeChart 的主要类 和接口 3、 XXXXXDataset
数 据集对象,用于提供显示图表所用的数据 。根据不同类型的图表对应着很多类型的数 据集对象类。常用的数据集对象有:柱状图 数据集对象 DefaultCategoryDataset、饼图 数据集对象DefauldPieDataset和曲线图数据 集对象 DefaultTableXYDataset 。 • 5、XXXXXPlot 图表区域对象,基本上这个对象决定着什么 样式的图表,创建该对象的时候需要Axis、
hcce2010第三章面向对象jfreechart交流的内容jfreechart的介绍jfreechart的包类的认知使用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图表制作
实现的思路 1、初始化图表数据 2、获得图表数据集DefaultPieDataset 3、利用chart工厂创建一个jfreechart实例 JFreeChart chart = ChartFactory.createPieChart3D(title, // 图表标题 dataset, // 图表数据集 true, // 是否显示图例 false, // 是否生成工具(提示) false // 是否生成URL链接 ); 4、通过TextTitle类设置饼图的标题与字体: void setFont(Font font)标题字体 void setPaint(Paint paint)标题字体颜色 void setText(String title)标题内容 5、通过LegendTitle类设置图例的字体: void setItemFont(Font font)标题字体 6、获得饼图实例PiePlot,设置饼图参数: void setLabelFont(Font font)标签字体 void setForegroundAlpha(float alpha)指定图片的透明度(0.0-1.0) void setLabelGenerator(PieSectionLabelGenerator generator)分类标 签的格式,设置成null则整个标签包括连接结都不显示 void setStartAngle(double angle)饼图的初始角度
了解JFreeChart 利用JFreeChart生成饼状图 利用JFreeChart生成柱状图 利用JFreeChart生成折线图 利用JFreeChart生成时序图 JFreeChat的Web应用
JFreeChart(/) 是一个开 源的 JAVA 项目,它主要用来开发各种各样的图 表,这些图表包括:饼图、柱状图 ( 普通柱状图 以及堆栈柱状图 ) 、线图、区域图、分布图、混 合图、甘特图以及一些仪表盘等等。在这些不同 式样的图表上可以满足目前商业系统的要求。 JFreeChart 是一种基于 JAVA 语言的图表开发 技术。 JFreeChart 可用于 Servlet 、 JSP 、 Applet 、 Java Appication 环境中,通过 JDBC 可动态显示任何数据库数据。
使用JFreeChart创建图表
JFreeChart概述
JFreeChart是开放源代码站点 是开放源代码站点上的一 是开放源代码站点 上的一 项目, 个JAVA项目,它主要用来各种各样的图表,这些图表包括: 项目 它主要用来各种各样的图表,这些图表包括:
Pie charts:饼图 (2D and 3D)、 Bar charts:柱状图 (2D and 3D) Line charts:曲线图 Area charts(区域图)、XY Plots(坐标图)、Time Series Charts(时序图)、 Histograms(直方图)、Difference Chart(方差图)、Step Chart(步骤图)、 Gantt Chart(甘特图)、Multiple Axis Charts、Combined and Overlaid Charts(混合图)等等
柱状图
step1:创建数据集对象
public static CategoryDataset createDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.setValue(5000, "北京","易学java"); dataset.setValue(3000, "上海","易学java"); dataset.setValue(2000, "广州","易学java"); dataset.setValue(10000, "北京","JavaWeb整合开发与项目实战"); dataset.setValue(6000, "上海","JavaWeb整合开发与项目实战"); dataset.setValue(4000, "广州","JavaWeb整合开发与项目实战"); dataset.setValue(15000, "北京","易用struts"); dataset.setValue(5000, "上海","易用struts"); dataset.setValue(10000, "广州","易用struts"); dataset.setValue(20000, "北京","精通JSF"); dataset.setValue(10000, "上海","精通JSF"); dataset.setValue(10000, "广州","精通JSF"); return dataset; }
jfreechart-1.0.6的WEB图表开发
基于jfreechart-1.0.6的WEB图表开发(注:jfreechart的很多版本不兼容,请大家在运行此例时确认下载了对应的版本)JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。
它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。
本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。
一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。
其下载地址为:/project/showfiles.php?group_id=15494,当前最新版本为1.0.6。
笔者下载的是1.0.6最新版。
说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.6.jar、gnujaxp.jar 和jcommon-1.0.10.jar这三个包;3)根目录下的jfreechart-1.0.6-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。
2. 环境配置笔者的开发环境如下:JDK:1.5MyEclipse:5.1.1 GATomcat:5.5.28为了后续的“用JFreeChart创建基于Web的图表”的一个例子的展示,我们在MyEclipse 中创建一个名为jfreechart的Web工程。
将下载的JFreeChart1.0.6下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。
另外还需要在web.xml文件中增加如下配置:二.柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。
首先在该目录下建立一个sample1.jsp文件,让我们来看一个简单的柱状图的例子,修改后的sample1.jsp的内容如下所示:在浏览器中输入地址:http://localhost:8080/jfreechart/bar/sample1.jsp,可看到如下柱状图:上面的这个柱状图比较简单,稍显单调,在有些情况下,我们需要用不同颜色来表示不同的种类,或者在种类上标上具体数值,亦或需要加上3D水晶效果。
通过代码实例跟我学JFreeChart 图表组件——在J2EE Struts Web应用系统中应用JFreeChart的实例(第3部分)
1.1通过代码实例跟我学JFreeChart 图表组件——在J2EE Struts Web应用系统中应用JFreeChart的实例(第3部分)
1.1.1部署和测试本示例的功能实现效果
1、部署本示例项目的系统程序
(1)部署该Web应用
(2)启动服务器
2、执行本示例的测试页面
(1)输入http://127.0.0.1:8080/StrutsJFreeChart/index.jsp
(2)选择“平面饼图”图形后,进行提交将出现下面的结果
(3)选择“三维饼图”图形
(4)进行提交将出现下面的结果
(5)选择“简单的三维柱形图”图形
(6)进行提交将出现下面的结果
(7)选择“复杂的三维柱形图”图形
(8)进行提交将出现下面的结果
(9)选择“定制的三维柱状图”图形
(10)进行提交将出现下面的结果
(11)选择“时间线图”图形
(12)进行提交将出现下面的结果
(13)选择“独立页面显示的三维柱形图”选项
(14)进行提交将出现下面的结果
(15)选择“删除缓存中的图表文件”选项
观察一下执行前的状态,在Tomcat的temp目录中存在许多临时图像文件。
进行提交将出现下面的结果----执行后,这些图像将没了!。
用JFreeChart做JSP配置、柱形图、饼图.曲线图大全(四).docx
四.曲线图接着我们来介绍曲线图的使用。
在笔者日常的开发工作中,曲线图用得最多,它可以用来绘制趋势图、统计分析等。
首先我们在WebRoot下建立一个line目录,用来存放曲线图实例的jsp页面。
我们在该目录下建立sample1.jsp页面来做一个简单的曲线图的例子。
在开始编码前,让我们来看看与画曲线图密切相关的几个类:1)TimeSeriesCollection曲线数据的集合。
2)TimeSeries曲线信息序列。
3)ChartFactory可以利用该类的createTimeSeriesChart方法来创建曲线的JFreeChart对象。
在下例中,我们显示阿蜜果的blog在2007年度各月份的访问量情况,修改后的sample1.jsp 的内容如下:<%@ page contentType="text/html;charset=GBK"%><%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.ServletUtilities,org.jfree.chart.title.TextTitle,org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection,java.awt.Font"%><%//访问量统计时间线TimeSeries timeSeries = new TimeSeries("阿蜜果blog访问量统计", Month.class);//时间曲线数据集合TimeSeriesCollection lineDataset = new TimeSeriesCollection();//构造数据集合timeSeries.add(new Month(1, 2007), 11200);timeSeries.add(new Month(2, 2007), 9000);timeSeries.add(new Month(3, 2007), 6200);timeSeries.add(new Month(4, 2007), 8200);timeSeries.add(new Month(5, 2007), 8200);timeSeries.add(new Month(6, 2007), 12200);timeSeries.add(new Month(7, 2007), 13200);timeSeries.add(new Month(8, 2007), 8300);timeSeries.add(new Month(9, 2007), 12400);timeSeries.add(new Month(10, 2007), 12500);timeSeries.add(new Month(11, 2007), 13600);timeSeries.add(new Month(12, 2007), 12500);lineDataset.addSeries(timeSeries);JFreeChart chart = ChartFactory.createTimeSeriesChart("访问量统计时间线", "月份", "访问量", lineDataset, true, true, true);//设置子标题TextTitle subtitle = new TextTitle("2007年度", new Font("黑体", Font.BOLD, 12)); chart.addSubtitle(subtitle);//设置主标题chart.setTitle(new TextTitle("阿蜜果blog访问量统计", new Font("隶书", Font.ITALIC, 15)));chart.setAntiAlias(true);String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>"width=500 height=300 border=0 usemap="#<%= filename %>">运行后的曲线效果如下图所示:有时我们需要显示各数据点及其数值,这是我们需要对上例进行一点改动,在JFreeChart chart = ChartFactory.createTimeSeriesChart……后,TextTitle subtitle = new TextTitle……前加上如下的代码:XYPlot plot = (XYPlot) chart.getPlot();XYLineAndShapeRenderer xylineandshaperenderer =(XYLineAndShapeRenderer)plot.getRenderer();//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//设置曲线图与xy轴的距离plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));//设置曲线是否显示数据点xylineandshaperenderer.setBaseShapesVisible(true);//设置曲线显示各数据点的值XYItemRenderer xyitem = plot.getRenderer();xyitem.setBaseItemLabelsVisible(true);xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSI DE12, TextAnchor.BASELINE_LEFT));xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));plot.setRenderer(xyitem);并引入了一些另外的包,引入包的语句变成:<%@ page import = "org.jfree.chart.ChartFactory,org.jfree.chart.title.TextTitle,org.jfree.data.time.TimeSeries,org.jfree.data.time.Month,org.jfree.data.time.TimeSeriesCollection,org.jfree.chart.plot.XYPlot,org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,java.awt.Color,org.jfree.ui.RectangleInsets,java.awt.Font,org.jfree.chart.renderer.xy.XYItemRenderer,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.ServletUtilities,bels.*,org.jfree.ui.*"%>运行该实例,效果如下所示:上面两例的曲线图都是但曲线的,有时候我们对两个曲线进行比较,例如对阿蜜果在2006年度和2007年度的blog访问量进行比较,在此种情况下,我们需要在一个曲线图中显示两个曲线。
java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)
java利用JFreeChart实现各种数据统计图(柱形图_饼图_折线图)各类统计程序实现杨方 531115121 矢量图的生成矢量统计图,即是以矢量图形格式生成、存在和输出的统计图。
这种统计图图形要素丰富、交互编辑简单、存储格式多样,打印输出方便,是GIS应用系统最优先选择的统计图。
最常用的三类矢量统计图是直方图、曲线图、饼图。
矢量统计图的生成,首先要将数据组织为一定的格式,然后进行图形参数的计算和设置,再生成图形,最后进行浏览显示或者保存输出。
当然,如果对生成的图形不满意,可以进行参数修改,然后重新生成,最后再显示或保存。
1.1 数据组织原始数据可以整理为二维表格的形式,通过文件(*.txt,*.xls,*.doc)导入,也可以将数据整理为二维数组的形式输入。
统计图只支持为数值型的数据,包括整型、长整型、浮点型和双精度型等4种数据类型。
1.2 设置参数图形参数可以由用户外部输入,也可以根据数据生成默认参数,分为基本参数、坐标参数、图例参数和数据参数等。
(1)基本参数包括图形类型,图形名称,图形范围,点、线、区参数等。
(2)坐标轴参数包括是否绘制轴线、刻度线、标注、网格线的标志,刻度数,颜色,名称,比例尺,以及是否绘制包围盒或箭头的标志。
(3)图例参数包括是否绘制图例的标志和图例显示位置标志。
(4)数据参数包括数据类型,是否绘制数据表的标志,图形单元的宽度或间隔、图形单元的颜色,系列和类别显示标志等。
1.3 图形生成生成图形的基本步骤如下:(1)确认存在点、线、面工作区。
生成的图形要暂时存入工作区中,然后才能进行显示或保存。
点线面工作区可以由外部输入,也可以在软件中生成。
(2)确认各项图形参数有效。
必须保证每项图形参数都有效,否则软件将出错。
对于没有设置有效值的参数,要重新设置默认参数。
(3)依次生成图形的各个要素:生成坐标轴、生成图形主体、生成数据表、生成图例和生成图形。
在生成统计图的过程中,要随时计算图形的当前范围,以控制后续元素的位置。
JFreeChart在JavaWeb项目中的应用_侯俣
第8卷 第10期 2008年5月1671-1819(2008)10-2699-03 科 学 技 术 与 工 程S c i e n c e T e c h n o l o g y a n d E n g i n e e r i n g Vo l .8 N o .10 M a y 2008 2008 S c i .T e c h .E n g n g .J F r e e C h a r t 在J a v a We b 项目中的应用侯 俣 刘万军1*(辽宁工程技术大学电子与信息工程学院,软件学院1,葫芦岛125105)摘 要 针对W e b 项目对图表技术的要求不断提高,介绍一种开源的基于J a v a 技术的动态图表开发组件J F r e e C h a r t 。
结合某煤矸石热电厂管理信息系统,具体阐述了如何通过J F r e e C h a r t 组件构建动态图表,为报表数据提供可视化、直观化的分析。
关键词 J F r e e C h a r t J a v a 动态图表中图法分类号 T P 317.4; 文献标志码 A2008年1月25日收到第一作者简介:侯 俣(1983—),男,辽宁省阜新市人,硕士研究生,研究方向:软件理论及应用。
E -m a i l :h o u y u @y a h o o .c n 。
*通讯作者简介:刘万军(1959—),男,辽宁省北宁市人,教授,硕士研究生导师,研究方向:软件理论。
在众多W e b 系统中,数据统计分析报表往往是类E x c e l 的二维表,这种报表样式不便于直观的比较和分析。
为了更加适应企业需要,便于领导层做商业性的决策和分析,数据的体现形式由以往的单一形式发展为现在的直观图表形式,这在面向W e b 系统开发中有着重要意义。
1 We b 图表技术目前生成基于浏览器的W e b 图表技术很多,一是通过V M L (V e c t o r M a r k u p L a n g u a g e )方式实现,它存在很多局限性,如受限于浏览器,且没有封装成完整的图表开发包;二是通过A p p l e t 产生图表,它对客户端要求较高,只适合一些局域网的应用,而对于因特网的环境不太适合;三是通过服务端直接生成图表的图片,这种方式对客户端几乎没有什么要求,直接在W e b 服务器端生成好图表图片文件后发送给浏览器,它的缺点是加重了服务端的负担,对服务端要求就相对较高。
通过实例跟我学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教程--入门一、JFreeChart获取。
JFreeChart是JFreeChart公司在开源网站上的一个项目,该公司的主要产品有如下:1、JFreeReport:报表解决工具2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)3、JCommon:JFreeReport和JFreeChart的公共类库4、JFreeDesigner:JFreeReport的报表设计工具我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),获取地址:/jfreechart/index.html(同时可以获得简明介绍)我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。
二、JFreeChart配置安装1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar是例子程序(该部分留给大家自己去研究)2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、lib\gnujaxp.jar3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml 文件,在其中加入如下代码:Java代码至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。
这里值得提出的是jfreechart的类结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。
java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)
java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)最近在做数据挖掘的课程设计,需要将数据分析的结果很直观的展现给用户,这就要用到数据统计图,要实现这个功能就需要几个第三方包了:1.jfreechart-1.0.13.jar2.jcommon-1.0.16.jar3.gnujaxp.jar先来看一下,最终效果图:主要是jfreechart-1.0.13.jar,但这三个包要齐全,我已经将所有与jfreechart 有关的jar包与本文实例的工程(代码)一同压缩上传了,有兴趣的同学可以下载,下载地址:/detail/pzhtpf/4327700接下来,我们一步步来实现本程序。
一,前期准备工作,也就把这三个第三方包添加进本文工程,添加过程特别简单,前面写过一篇博客,讲的是java如何读取Excel表格中的数据(有兴趣的同学可以看一看:/pzhtpf/article/details/7506135),也要添加第三方包,添加过程一模一样,这里我们在复习一遍:1,建,立java项目,在这个项目在建立一个新的文件夹lib;2,将上述三个jar包,复制到lib3,然后右键点击这个java项目,选择Properties4,在左侧列表里选中Java Build Path,右侧选中Libraries5,点击Add JARs6,然后去选择这个项目中lib文件夹中的三个jar,点击确定成功后,项目中会多一个文件夹为:Referenced Libraries二,实现柱形图的java代码:import java.awt.Font;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;public class BarChart{ChartPanel frame1;public BarChart(){CategoryDataset dataset=getDataSet();JFreeChart chart=ChartFactory.createBarChart3D("水果",//图表标题"水果种类",//目录轴的显示标签"数量",//数值轴的显示标签dataset,//数据集PlotOrientation.VERTICAL,//图表方向:水平、垂直true,//是否显示图例(对于简单的柱状图必须是false)false,//是否生成工具false//是否生成URL链接);//从这里开始CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象CategoryAxis domainAxis=plot.getDomainAxis();//水平底部列表domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));//水平底部标题domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));//垂直标题ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,15));chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体//到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题frame1=new ChartPanel(chart,true);//这里也可以用chartFrame,可以直接生成一个独立的Frame}private static CategoryDataset getDataSet(){DefaultCategoryDataset dataset=new DefaultCategoryDataset();dataset.addValue(100,"北京","苹果");dataset.addValue(100,"上海","苹果");dataset.addValue(100,"广州","苹果");dataset.addValue(200,"北京","梨子");dataset.addValue(200,"上海","梨子");dataset.addValue(200,"广州","梨子");dataset.addValue(300,"北京","葡萄");dataset.addValue(300,"上海","葡萄");dataset.addValue(300,"广州","葡萄");dataset.addValue(400,"北京","香蕉");dataset.addValue(400,"上海","香蕉");dataset.addValue(400,"广州","香蕉");dataset.addValue(500,"北京","荔枝");dataset.addValue(500,"上海","荔枝");dataset.addValue(500,"广州","荔枝");return dataset;}public ChartPanel getChartPanel(){return frame1;}}效果图如下:但我们把private static CategoryDataset getDataSet(){}方法中的数据变化一下后,又会形成另一种效果,比如说我们改成:private static CategoryDataset getDataSet(){DefaultCategoryDataset dataset=new DefaultCategoryDataset();dataset.addValue(100,"苹果","苹果");dataset.addValue(200,"梨子","梨子");dataset.addValue(300,"葡萄","葡萄");dataset.addValue(400,"香蕉","香蕉");dataset.addValue(500,"荔枝","荔枝");return dataset;}效果图如下:三,实现饼状图的java代码:package com.njue.testJFreeChart;import java.awt.Font;import java.text.DecimalFormat; import java.text.NumberFormat;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.data.general.DefaultPieDataset;public class PieChart{ChartPanel frame1;public PieChart(){DefaultPieDataset data=getDataSet();JFreeChart chart=ChartFactory.createPieChart3D("水果产量",data,true,false,false);//设置百分比PiePlot pieplot=(PiePlot)chart.getPlot();DecimalFormat df=new DecimalFormat("0.00%");//获得一个DecimalFormat对象,主要是设置小数问题NumberFormat nf=NumberFormat.getNumberInstance();//获得一个NumberFormat对象StandardPieSectionLabelGenerator sp1=new StandardPieSectionLabelGenerator("{0}{2}",nf,df);//获得StandardPieSectionLabelGenerator对象pieplot.setLabelGenerator(sp1);//设置饼图显示百分比//没有数据的时候显示的内容pieplot.setNoDataMessage("无数据显示");pieplot.setCircular(false);pieplot.setLabelGap(0.02D);pieplot.setIgnoreNullValues(true);//设置不显示空值pieplot.setIgnoreZeroValues(true);//设置不显示负值frame1=new ChartPanel(chart,true);chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体PiePlot piePlot=(PiePlot)chart.getPlot();//获取图表区域对象piePlot.setLabelFont(new Font("宋体",Font.BOLD,10));//解决乱码chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,10));}private static DefaultPieDataset getDataSet(){DefaultPieDataset dataset=new DefaultPieDataset();dataset.setValue("苹果",100);dataset.setValue("梨子",200);dataset.setValue("葡萄",300);dataset.setValue("香蕉",400);dataset.setValue("荔枝",500);return dataset;}public ChartPanel getChartPanel(){return frame1;}}效果图如下:四,实现折线图的java代码:package com.njue.testJFreeChart;import java.awt.Font;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.ValueAxis;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;public class TimeSeriesChart{ChartPanel frame1;public TimeSeriesChart(){XYDataset xydataset=createDataset();JFreeChart jfreechart=ChartFactory.createTimeSeriesChart("Legal&General单位信托基金价格","日期","价格",xydataset,true,true,true);XYPlot xyplot=(XYPlot)jfreechart.getPlot();DateAxis dateaxis=(DateAxis)xyplot.getDomainAxis();dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));frame1=new ChartPanel(jfreechart,true);dateaxis.setLabelFont(new Font("黑体",Font.BOLD,14));//水平底部标题dateaxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));//垂直标题ValueAxis rangeAxis=xyplot.getRangeAxis();//获取柱状rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));jfreechart.getLegend().setItemFont(new Font("黑体",Font.BOLD,15));jfreechart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体}private static XYDataset createDataset(){//这个数据集有点多,但都不难理解TimeSeries timeseries=new TimeSeries("legal&general欧洲指数信任",org.jfree.data.time.Month.class);timeseries.add(new Month(2,2001),181.80000000000001D);timeseries.add(new Month(3,2001),167.30000000000001D);timeseries.add(new Month(4,2001),153.80000000000001D);timeseries.add(new Month(5,2001),167.59999999999999D);timeseries.add(new Month(6,2001),158.80000000000001D);timeseries.add(new Month(7,2001),148.30000000000001D);timeseries.add(new Month(8,2001),153.90000000000001D);timeseries.add(new Month(9,2001),142.69999999999999D);timeseries.add(new Month(10,2001),123.2D);timeseries.add(new Month(11,2001),131.80000000000001D);timeseries.add(new Month(12,2001),139.59999999999999D);timeseries.add(new Month(1,2002),142.90000000000001D);timeseries.add(new Month(2,2002),138.69999999999999D);timeseries.add(new Month(3,2002),137.30000000000001D);timeseries.add(new Month(4,2002),143.90000000000001D);timeseries.add(new Month(5,2002),139.80000000000001D);timeseries.add(new Month(6,2002),137D);timeseries.add(new Month(7,2002),132.80000000000001D);TimeSeries timeseries1=new TimeSeries("legal&general英国指数信任",org.jfree.data.time.Month.class);timeseries1.add(new Month(2,2001),129.59999999999999D);timeseries1.add(new Month(3,2001),123.2D);timeseries1.add(new Month(4,2001),117.2D);timeseries1.add(new Month(5,2001),124.09999999999999D);timeseries1.add(new Month(6,2001),122.59999999999999D);timeseries1.add(new Month(7,2001),119.2D);timeseries1.add(new Month(8,2001),116.5D);timeseries1.add(new Month(9,2001),112.7D);timeseries1.add(new Month(10,2001),101.5D);timeseries1.add(new Month(11,2001),106.09999999999999D);timeseries1.add(new Month(12,2001),110.3D);timeseries1.add(new Month(1,2002),111.7D);timeseries1.add(new Month(2,2002),111D);timeseries1.add(new Month(3,2002),109.59999999999999D);timeseries1.add(new Month(4,2002),113.2D);timeseries1.add(new Month(5,2002),111.59999999999999D);timeseries1.add(new Month(6,2002),108.8D);timeseries1.add(new Month(7,2002),101.59999999999999D);TimeSeriesCollection timeseriescollection=new TimeSeriesCollection();timeseriescollection.addSeries(timeseries);timeseriescollection.addSeries(timeseries1);return timeseriescollection;}public ChartPanel getChartPanel(){return frame1;}}效果图如下:再来看一下主方法:import java.awt.GridLayout;import javax.swing.JFrame;public class mainClass{public static void main(String args[]){JFrame frame=new JFrame("Java数据统计图");frame.setLayout(new GridLayout(2,2,10,10));frame.add(new BarChart().getChartPanel());//添加柱形图frame.add(new BarChart1().getChartPanel());//添加柱形图的另一种效果frame.add(new PieChart().getChartPanel());//添加饼状图frame.add(new TimeSeriesChart().getChartPanel());//添加折线图frame.setBounds(50,50,800,600);frame.setVisible(true);}}五,总结以上都是一个简单的例子去实现了,想了解更深的同学可自行查询资料,其实以上代码都通俗易懂,只要结合自己的实际情况,便可开发出属于自己的Application,大家可以看出我这里是在Application上实现的,其实更多情况数据统计图在javaweb上应用更多,大家也可自行了解。
使用JFreeChart创建基于WEB的图形报表
使用JFreeChart创建基于WEB的图形报表2006-9-29前言为了创建一个可以在web浏览器上查看的图表,一般有下面几种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。
第三种不直接生成图片,而是将流直接送达web浏览器。
第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JA V A的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。
第二种对于图片文件的管理需要考虑。
因此我们下面将介绍一个JA V A的图表引擎JFreeChart用来产生基于WEB的图表。
JFreeChart支持生成的图片和应用系统的交互。
第一章JfeeChart简介,介绍JFreeChart项目情况。
第二章体验JFreeChart,介绍JFreeChart的应用,包括图形和应用交互。
第三章JFeechart 实现Line chart。
第四章JFeechart 实现Bar chart。
第五章JFeechart 实现Pie chart。
第六章部分API。
第一章JFreeChart简介JfreeChart是生成图标的开源软件,功能包括:●pie charts;●bar charts (regular and stacked, with an optional 3D effect);●line and area charts;●scatter plots and bubble charts;●time series, high/low/open/close charts and candle stick charts;●combination charts;●Pareto charts;●Gantt charts;●wind plots, meter charts and symbol charts;●wafer map charts;JfreeChart提供的其他特性:●complete source code is included, under the terms of the GNU Lesser GeneralPublic Licence;●access to data from any source via dataset interfaces;●support for multiple secondary axes and datasets;●tooltips, zooming, printing;●direct export to PNG and JPEG;●export to PDF via iText and SVG via Batik (both described in the JFreeChartDeveloper Guide).●支持servlets, JSP (感谢Cewolf), applets 或者Java Application;●完善的Javadoc文档;第二章体验JFreeChart本章采用JfreeChart的演示程序说明JfreeChart的基本功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JFreeChart项目简介JFreeChart是开放源代码站点上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
这些不同式样的图表基本上可以满足目前的要求。
为了减少篇幅本文主要介绍前面三种类型的图表,读者可以触类旁通去开发其他样式的图表。
下面几个是JFreeChart产生的这三种类型图表的结果:图1图2图3上面的三个图都是表示四个季度的某个产品的销量信息。
在继续下面小节之前必须先准备好开发环境,因为是基于WEB浏览器的图表展现,因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphere,Tomcat等)。
WEB环境的搭建就不累赘了,读者根据喜好自行安装。
JFreeChart引擎本身需要到上下载,地址如下:下载的时候需要注意的是必须下载两个文件:JFreeChart以及Jcommon。
目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6这里有点笔者在开发中遇见的问题需要注意的是:在使用Eclipse开发的时候会报一个莫名其妙的错误,错误可能指向某个类文件的第一行。
遇到这样的问题一般是因为没有把Jcommon的jar包设置到项目的类路径中的缘故。
具体的原因不祥。
回页首解读JFreeChart的源码结构在开始使用JFreeChart之前我们有必要先大概了解一下JFreeChart本身的结构以及它所带一些例子程序,这样有助于我们下一步自行开发。
下载JFreeChart包后已经带有非常丰富的例子,因为JFreeChart 这个项目本身的使用文档非常少,因此学习它最好的办法就是学习它所带的例子源码。
在包org.jfree.chart.demo中有几十个文件用于展示JFreeChart所能支持的所有图表的结果。
如果你的JDK 是比较新的情况下可能在运行这些例子时会有问题,现象如下:这个错误是由于新版的Swing大量的使用了微软的DirectDraw的技术来提高画图的性能,而可能你的显卡在这时候会跟你闹点情绪或者显卡本身并不支持这样的一个技术。
难道就没有办法了嘛?要解决这个问题也非常简单,我们可以屏蔽掉DirectDraw,不让Swing使用该技术就可以了。
在运行这些代码时给虚拟机指定参数-Dsun.java2d.noddraw即可。
这时可能你又该纳闷了,不说是基于Web的图表嘛,怎么又扯到Swing上了?这是因为为了使开发者容易上手,无需配置任何运行环境,所以这些例子都是基于GUI方式的用于展现给开发者如果生成一个图表,我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显示一个图表。
当我们把生成的图表对象Export到一个图像文件即可在Web上发布。
下面我们来介绍JFreeChart中几个核心的对象类:基本上我认为JFreeChart项目本身的类结构的设计并不是很好,首先在创建图表的时候用到了大量的工厂方法,这样做虽然可以简化创建图表对象的代码,但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情;其次除图表对象本身外其余的类过于复杂,使用者必须去了解每个类型的图表对象应该对应哪些Axis、Plot、Renderer类,并且必须非常熟悉这些类的构造函数中每个参数的具体含义。
这些问题都大大困扰很多初学者。
不过,虽然存在很多问题,但是JFreeChart本身仍不失为一个非常优秀的图表引擎,况且项目本身也在逐渐的发展中。
在非常简略的介绍了JFreeChart本身的代码结构后,下面我们开始动手试验几个常用的图表并把他们放到web上。
回页首使用JFreeChart生成各种样式的图表限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。
我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。
import java.io.*;import org.jfree.data.*;import org.jfree.chart.*;import org.jfree.chart.plot.*;/*** 该类用于演示最简单的柱状图生成* @author Winter Lau*/public class BarChartDemo {public static void main(String[] args) throws IOException{CategoryDataset dataset = getDataSet2();JFreeChart chart =ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);FileOutputStream fos_jpg = null;try {fos_jpg = newFileOutputStream("D:\\fruit.jpg");ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,4 00,300,null);} finally {try {fos_jpg.close();} catch (Exception e) {}}}/*** 获取一个演示用的简单数据集对象* @return*/private static CategoryDataset getDataSet() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, null, "苹果");dataset.addValue(200, null, "梨子");dataset.addValue(300, null, "葡萄");dataset.addValue(400, null, "香蕉");dataset.addValue(500, null, "荔枝");return dataset;}/*** 获取一个演示用的组合数据集对象* @return*/private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "北京", "苹果");dataset.addValue(100, "上海", "苹果");dataset.addValue(100, "广州", "苹果");dataset.addValue(200, "北京", "梨子");dataset.addValue(200, "上海", "梨子");dataset.addValue(200, "广州", "梨子");dataset.addValue(300, "北京", "葡萄");dataset.addValue(300, "上海", "葡萄");dataset.addValue(300, "广州", "葡萄");dataset.addValue(400, "北京", "香蕉");dataset.addValue(400, "上海", "香蕉");dataset.addValue(400, "广州", "香蕉");dataset.addValue(500, "北京", "荔枝");dataset.addValue(500, "上海", "荔枝");dataset.addValue(500, "广州", "荔枝");return dataset;}}程序运行结束后生成的图片文件效果如下图所示:图4如果是使用简单的数据即使用getDataSet方法获取数据集时产生的图片文件如下:图52 饼图对于饼图而言,数据集的获取用的不是同一个数据集类,另外饼图不支持同一个类别的项目中还有子项目这样的数据。
我们只给出创建饼图的代码,至于写图表到一个文件则与柱状图一致,无需重复。
import org.jfree.data.*;import org.jfree.chart.*;/*** 用于演示饼图的生成* @author Winter Lau*/public class PieChartDemo {public static void main(String[] args) throws IOException{DefaultPieDataset data = getDataSet();JFreeChart chart =ChartFactory.createPie3DChart("水果产量图", // 图表标题data,true, // 是否显示图例false,false);//写图表对象到文件,参照柱状图生成源码}/*** 获取一个演示用的简单数据集对象* @return*/private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("苹果",100);dataset.setValue("梨子",200);dataset.setValue("葡萄",300);dataset.setValue("香蕉",400);dataset.setValue("荔枝",500);return dataset;}}生成的饼图文件效果如下:图6回页首将生成的图表移到浏览器上为了将生成的图表直接传给客户端浏览器,只需要将前面两个例子中的文件流换成是通过HttpServletResponse对象获取到的输出流,详细代码清单如下:public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {res.setContentType("image/jpeg");DefaultPieDataset data = getDataSet();JFreeChart chart =ChartFactory.createPie3DChart("水果产量图",data,true,false,false);ChartUtilities.writeChartAsJPEG(res.getOutputStream (),100,chart,400,300,null);}/*** 获取一个演示用的简单数据集对象* @return*/private static DefaultPieDataset getDataSet() {DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("苹果",100);dataset.setValue("梨子",200);dataset.setValue("葡萄",300);dataset.setValue("香蕉",400);dataset.setValue("荔枝",500);return dataset;}}回页首高级主题很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。