JFreeChart图表应用详解
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在CategoryPlot和XYPlot类中支持多轴 和数据源显示。利用这个特征可以在一个图表上显 示两个或多个数据源数据,但对于数据包含的数据 有巨大差距时留有一定的余地。如图 所示。
典型的,使用JFreeChart构建图表时,图表有一 个单数据源、单renderer、单X/Y轴的图区最为 常见。然而,在一个图区上添加多个数据源、多 个renderer和多个轴也是可能的。 本实例中,展示了如何在一个图区上显示其他额 外的数据源、renderer 和轴。
创建一个图表 添加额外的轴 添加一个额外的数据源 添加一个额外的renderer
当添加一个数据源时,通常为该数据源添加一个附 加的 renderer 也是非常有意义的。使用方法 setRenderer():
方法的第一个参数为上节中添加的数据源的索引。 注意:如果不想为数据源指定一个附加的 rendere, 系统将默认使用主 renderer,这样系列的颜色就 会在主数据源和附加数据源之间共享。
简介 实例 建议和技巧
当使用多轴图表时,需要为系列对应的轴提供一些 可视化的建议。
创建一个图表 添加额外的轴 添加一个额外的数据源 添加一个额外的renderer
如果在图区上添加额外的轴,使用setRangeAxis()方法 来添加: 方法 setRangeAxis()是用来添加图区的轴,注意轴的 索引1已经被使用——添加其他轴时,通过增加该索引 来添加新轴。方法setRangeAxisLocation()允许指定 轴出现的位置(使用 AxisLocation 类)。添加的轴可 以跟主坐标轴同一边,或者在对立边。例如:如果指定 的是 AxisLocation.BOTTOM_OR_LEFT,这意味着如 果图区的方向是垂直的话,将在右边添加一个Y轴,如 果图区的方向是水平的话,将在底部添加一个 Y 轴。
使用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增强JSP报表的用户体验JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。
它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。
本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。
一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。
其下载地址为:/project/showfiles.php?g roup_id=15494,当前最新版本为1.0.6。
笔者下载的是1.0.6最新版。
说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.6.ja r、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文件中增加如下配置:<servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-clas s></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/DisplayChart</url-pattern></servlet-mapping>二.柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。
JFreeChart使用简介
JFreeChart使用简介一、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 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。
同样,针对不同类型的报表图,它有着不同的子类实现!在下面我们简称它为 Renderer下面我们结合不同类型的图形来具体分析这个流程。
三、饼图饼图的dataset一般是用PieDataset接口,具体实现类是DefaultPieDataset1、创建一个数据源(dataset):private static PieDataset createDataset(){DefaultPieDataset defaultpiedataset = new DefaultPieDataset(); //注意是DefaultPieDataset!!defaultpiedataset.setValue(”One”, new Double(43.200000000000003D));defaultpiedataset.setValue(”Two”, new Double(10D));defaultpiedataset.setValue(”Three”, new Double(27.5D));defaultpiedataset.setValue(”Four”, new Double(17.5D));return defaultpiedataset;}2、由ChartFactory 产生 JFreeChart 对象private static JFreeChart createChart(PieDataset piedataset) {JFreeChart jfreechart = ChartFactory.createPieChart(”Pie Chart Demo 1″, //图形标题名称piedataset, // datasettrue, // legend?true, // tooltips?false); //URLs?PiePlot pieplot = (PiePlot)jfreechart.getPlot(); //通过JFreeChart 对象获得 plot:PiePlot!!pieplot.setNoDataMessage(”No data available”); // 没有数据的时候显示的内容return jfreechart;}一些重要的方法:pieplot.setExplodePercent(0,0.3D) //把Lable 为”One” 的那一块”挖”出来30%3、输出略四、柱状图柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset接口1、创建一个数据源(dataset):private static CategoryDataset createDataset(){String series1 = “First”;String series2 = “Second”;String series3 = “Third”;String category1 = “Category 1″;String category2 = “Category 2″;String category3 = “Category 3″;String category4 = “Category 4″;String category5 = “Category 5″;DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();defaultcategorydataset.addValue(1.0D, series1, category1);defaultcategorydataset.addValue(4D, series1, category2);defaultcategorydataset.addValue(3D, series1, category3);defaultcategorydataset.addValue(5D, series1, category4);defaultcategorydataset.addValue(5D, series1, category5);defaultcategorydataset.addValue(5D, series2, category1);defaultcategorydataset.addValue(7D, series2, category2);defaultcategorydataset.addValue(6D, series2, category3);defaultcategorydataset.addValue(8D, series2, category4);defaultcategorydataset.addValue(4D, series2, category5);defaultcategorydataset.addValue(4D, series3, category1);defaultcategorydataset.addValue(3D, series3, category2);defaultcategorydataset.addValue(2D, series3, category3);defaultcategorydataset.addValue(3D, series3, category4);defaultcategorydataset.addValue(6D, series3, category5);return defaultcategorydataset;}2、由ChartFactory 产生 JFreeChart 对象private static JFreeChart createChart(CategoryDataset categorydataset){JFreeChart jfreechart = ChartFactory.createBarChart(”Bar Chart Demo”, //图形标题名称“Category”,//domain 轴 Lable这里先简单理解为横坐标Lable好了“Value”, //range 轴 Lable这里也先简单理解为纵坐标Lable好了categorydataset, // datasetPlotOrientation.VERTICAL, //垂直显示true, // legend?true, // tooltips?false); //URLs?jfreechart.setBackgroundPaint(Color.white); //设定背景色为白色CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //获得 plot:CategoryPlot!!categoryplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色categoryplot.setDomainGridlinePaint(Color.white); //横坐标网格线白色categoryplot.setDomainGridlinesVisible(true); //可见categoryplot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色//下面两行使纵坐标的最小单位格为整数NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型到BarRenderer!!barrenderer.setDrawBarOutline(false); // Bar的外轮廓线不画GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,0.0F, 0.0F, new Color(0, 0, 64)); //设定特定颜色GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green,0.0F, 0.0F, new Color(0, 64, 0));GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red,0.0F, 0.0F, new Color(64, 0, 0));barrenderer.setSeriesPaint(0, gradientpaint); //给series1 Bar 设定上面定义的颜色barrenderer.setSeriesPaint(1, gradientpaint1); //给series2 Bar 设定上面定义的颜色barrenderer.setSeriesPaint(2, gradientpaint2); //给series3 Bar 设定上面定义的颜色CategoryAxis categoryaxis = categoryplot.getDomainAxis(); //横轴上的 Lable 45度倾斜categoryaxis.setCategoryLabelPositions(CategoryLabelPositi ons.UP_45);return jfreechart;}一些重要的方法:(增加一块标记)IntervalMarker intervalmarker = new IntervalMarker(4.5D, 7.5D);intervalmarker.setLabel(”Target Range”);intervalmarker.setLabelFont(new Font(”SansSerif”, 2, 11));intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT );intervalmarker.setPaint(new Color(222, 222, 255, 128));categoryplot.addRangeMarker(intervalmarker,Layer.BACKGROUND);五、折线图折线图的dataset 两种CatagoryDataset接口(具体实现类是DefaultCategoryDataset),XYDataset 接口1、CatagoryDataset接口:A、创建一个数据源(dataset):private static CategoryDataset createDataset(){String series1 = “First”;String series2 = “Second”;String series3 = “Third”;String type1 = “Type 1″;String type2 = “Type 2″;String type3 = “Type 3″;String type4 = “Type 4″;String type5 = “Type 5″;String type6 = “Type 6″;String type7 = “Type 7″;String type8 = “Type 8″;DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();defaultcategorydataset.addValue(1.0D, series1, type1);defaultcategorydataset.addValue(4D, series1, type2);defaultcategorydataset.addValue(3D, series1, type3);defaultcategorydataset.addValue(5D, series1, type4);defaultcategorydataset.addValue(5D, series1, type5);defaultcategorydataset.addValue(7D, series1, type6);defaultcategorydataset.addValue(7D, series1, type7);defaultcategorydataset.addValue(8D, series1, type8);defaultcategorydataset.addValue(5D, series2, type1);defaultcategorydataset.addValue(7D, series2, type2);defaultcategorydataset.addValue(6D, series2, type3);defaultcategorydataset.addValue(8D, series2, type4);defaultcategorydataset.addValue(4D, series2, type5);defaultcategorydataset.addValue(4D, series2, type6);defaultcategorydataset.addValue(2D, series2, type7);defaultcategorydataset.addValue(1.0D, series2, type8);defaultcategorydataset.addValue(4D, series3, type1);defaultcategorydataset.addValue(3D, series3, type2);defaultcategorydataset.addValue(2D, series3, type3);defaultcategorydataset.addValue(3D, series3, type4);defaultcategorydataset.addValue(6D, series3, type5);defaultcategorydataset.addValue(3D, series3, type6);defaultcategorydataset.addValue(4D, series3, type7);defaultcategorydataset.addValue(3D, series3, type8);return defaultcategorydataset;}B、由ChartFactory 产生 JFreeChart 对象 (与上面重复的部分就不再注释)private static JFreeChart createChart(CategoryDatasetcategorydataset){JFreeChart jfreechart = ChartFactory.createLineChart(”Line Chart Demo 1″,“Type”,“Value”,categorydataset,PlotOrientation.VERTICAL,true,true,false);jfreechart.setBackgroundPaint(Color.white);CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();categoryplot.setBackgroundPaint(Color.lightGray);categoryplot.setRangeGridlinePaint(Color.white);NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createInteger TickUnits());numberaxis.setAutoRangeIncludesZero(true);//获得renderer 注意这里是下嗍造型到lineandshaperenderer!!LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();lineandshaperenderer.setShapesVisible(true); //series 点(即数据点)可见lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {10F, 6F}, 0.0F)); //定义series为”First”的(即series1)点之间的连线,这里是虚线,默认是直线lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {6F, 6F}, 0.0F)); //定义series为”Second”的(即series2)点之间的连线lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {2.0F, 6F}, 0.0F)); //定义series为”Third”的(即series3)点之间的连线return jfreechart;}一些重要的方法:lineandshaperenderer.setLineVisible(true) //series 点(即数据点)间有连线可见2、XYDataset 接口:A、创建一个数据源(dataset):private static XYDataset createDataset(){XYSeries xyseries = new XYSeries(”First”); //先产生XYSeries 对象xyseries.add(1.0D, 1.0D);xyseries.add(2D, 4D);xyseries.add(3D, 3D);xyseries.add(4D, 5D);xyseries.add(5D, 5D);xyseries.add(6D, 7D);xyseries.add(7D, 7D);xyseries.add(8D, 8D);XYSeries xyseries1 = new XYSeries(”Second”);xyseries1.add(1.0D, 5D);xyseries1.add(2D, 7D);xyseries1.add(3D, 6D);xyseries1.add(4D, 8D);xyseries1.add(5D, 4D);xyseries1.add(6D, 4D);xyseries1.add(7D, 2D);xyseries1.add(8D, 1.0D);XYSeries xyseries2 = new XYSeries(”Third”);xyseries2.add(3D, 4D);xyseries2.add(4D, 3D);xyseries2.add(5D, 2D);xyseries2.add(6D, 3D);xyseries2.add(7D, 6D);xyseries2.add(8D, 3D);xyseries2.add(9D, 4D);xyseries2.add(10D, 3D);XYSeriesCollection xyseriescollection = new XYSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 对象xyseriescollection.addSeries(xyseries);xyseriescollection.addSeries(xyseries1);xyseriescollection.addSeries(xyseries2);return xyseriescollection;}B、由ChartFactory 产生 JFreeChart 对象private static JFreeChart createChart(XYDataset xydataset) {JFreeChart jfreechart = ChartFactory.createXYLineChart(”Line Chart Demo 2″,“X”,“Y”,xydataset,PlotOrientation.VERTICAL,true,true,false);jfreechart.setBackgroundPaint(Color.white);XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得plot:XYPlot!!xyplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); //设定坐标轴与图表数据显示部分距离xyplot.setDomainGridlinePaint(Color.white); //网格线颜色xyplot.setRangeGridlinePaint(Color.white);//获得 renderer 注意这里是XYLineAndShapeRenderer !!XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();xylineandshaperenderer.setShapesVisible(true); //数据点可见xylineandshaperenderer.setShapesFilled(true); //数据点被填充即不是空心点NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());return jfreechart;}一些重要的方法:XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一个XYSeries数据点间连线不可见xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二个XYSeries数据点不可见xyplot.setRenderer(xylineandshaperenderer);六、时间序列图时间序列图和折线图很相似,不同的是它在domain轴的数据是时间而不是数字。
JFreeChart_图表条目标签
所有的系列显示条目标签
方法renderer.setBaseItemLabelsVisible(false) 是控制着条目标签的显示。对于 CategoryItemRenderer:
同样对于:XYItemRenderer
一旦设置,这个标志优先管理在所有地方对每一 系列做的设置,主要为了应用每一系列的设置。 可以设置个标志为null
2
图表条目标签
简介 显示条目标签 条目标签外观 条目标签位置 定制条目标签文本 实例1 实例2
3
简介
概述 局限性
4
概述
对于大多数的图表类型来说,JFreeChart 允许在 图表的每个条目上、或者内部、或者附近显示条 目标签。例如,下图 在每个条形图上显示出了真 实的值。
5
该方法可以返回任意字符串,因此格式化这个字符 串。如果不想显示标签,可以设置为 null。
45
图表条目标签
简介 显示条目标签 条目标签外观 条目标签位置 定制条目标签文本 实例1 实例2
46
实例1
概述 源代码
47
概述
在第一个实例中,目的就是当当条目的值大于某个 限定的值时,就显示该标签。如图所示。
49
实例1
概述 源代码
50
源代码
51
图表条目标签
简介 显示条目标签 条目标签外观 条目标签位置 定制条目标签文本 实例1 实例2
52
实例2
概述 源代码
53
概述
在本实例中,目的是在每个系列的标签上显示出值 和百分比值(这个百分比值,这个系列在某一部分 的条形直方图或全部条形直方图的总值中的比值)。 如下图所示。
法会出错。
26
条目标签外观
利用JFreeChart生成折线图
利用JFreeChart生成折线图通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折线图。
如果想生成普通效果的折线图,需要通过工厂类ChartFactory的createLineChart()方法获得JFreeChart类的实例;如果想生成3D效果的折线图,需要通过工厂类ChartFactory的createLineChart3D()方法获得JFreeChart类的实例。
这两个方法的入口参数是完全相同的,各个入口参数的类型及功能请参见14.2.1节的表14.2。
可以分别通过绘图区对象CategoryPlot的getDomainAxis()方法和getRangeAxis()方法,获得横轴对象和纵轴对象,通过得到的轴对象可以设置绘制坐标轴的相关属性,常用方法及实现功能如表14.4所示。
表14.4 设置坐标轴绘制属性的部分通用方法纵轴对象还提供了设置坐标最大值的方法setUpperBound(double max),在默认情况下将最大值控制在能够正常绘制统计图的范围内。
通过java.awt.BasicStroke类可以绘制出各种各样的线段,大体分为实线段和虚线段,可控的绘制条件包括线条的宽度、线段端点的风格、折线段的折点风格、虚线段的绘制风格和虚线段的绘制偏移量,BasicStroke类提供的所有构造方法如表14.5所示。
表14.5 BasicStroke类提供的所有构造方法线段端点的修饰风格有3种,分别由3个常量表示,具体信息如表14.6所示。
表14.6 线段端点修饰风格简介线段折点的修饰风格同样有3种,也由3个常量表示,具体信息如表14.7所示。
表14.7 线段折点修饰风格简介入口参数dash 用来定义虚线,为float 型数组,当dash 数组由偶数个元素组成时,索引值为偶数的元素值代表虚线段的长度,索引值为奇数的元素值代表两个虚线段之间的空白部分的长度,需要注意的是,数组的索引值是从0开始的;当数组中只有一个元素时,例如dash={6},等同于dash={6,6}。
jfreechart用法例子
jfreechart用法例子一、饼图:DefaultPieDataset dataset=new DefaultPieDataset();//开始填充数据dataset.setValue("Java", new Double(43.200000000000003D));dataset.setValue("Visual Basic", new Double(10D));dataset.setValue("C/C++", new Double(17.5D));dataset.setValue("PHP", new Double(32.5D));dataset.setValue("Perl", new Double(12.5D));JFreeChart chart=ChartFactory.createPieChart("2D饼型图",dataset,true,true,true);chart.setTitle("统计图");//设置图片标题ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection());StringimgaeFileName=ServletUtilities.saveChartAsJPEG(chart,300,200, info,session);//设置生成图片,包括图片的大小,长度是300,宽是200session.setAttribute("image_name1",imageFileName;String URL= request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;//Display为org.jfree.chart.servlet.DisplayChartsession.setAttribute("image_url1",URL);显示代码:(以下显示代码不注明了,是一样的,只是session中的属性名不同而已,大家注意区别)" width=300 height=200 border=0 usemap="#<%=session.getAttribute("image_name1") %>">二、3D饼图DefaultPieDataset defaultpiedataset = new DefaultPieDataset();defaultpiedataset.setValue("Java", new Double(43.200000000000003D));defaultpiedataset.setValue("Visual Basic", new Double(10D));defaultpiedataset.setValue("C/C++", new Double(17.5D));defaultpiedataset.setValue("PHP", new Double(32.5D));defaultpiedataset.setValue("Perl", new Double(12.5D));JFreeChart jfreechart = ChartFactory.createPieChart3D("3D 饼图", defaultpiedataset, true, false, false);PiePlot3D pieplot3d = (PiePlot3D)jfreechart.getPlot();String imageFileName2= ServletUtilities.saveChartAsJPEG(jfreechart,300,200,session);session.setAttribute("image_name2",imageFileName2);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName2;session.setAttribute("image_url2",URL);三、柱图DefaultCategoryDataset dataset=new DefaultCategoryDataset();//设置数据源dataset.setValue(new Double(43.200000000000003D),"图解","Java" );dataset.setValue( new Double(10D),"图解","Visual Basic");dataset.setValue(new Double(17.5D), "图解","C/C++");dataset.setValue(new Double(32.5D), "图解","PHP");dataset.setValue(new Double(12.5D), "图解","Perl");//添加数据,参数包括名称和数值JFreeChart chart1=ChartFactory.createBarChart3D("柱图","大人物","地盘", dataset,PlotOrientation.VERTICAL,false,false,false);CategoryPlot plot=chart1.getCategoryPlot();//BarRenderer3D renderer1=new BarRenderer3D();final BarRenderer renderer1 = (BarRenderer)plot.getRenderer();renderer1.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer1.setItemLabelsVisible(true);//显示每个柱子上的数据renderer1.setItemMargin(0.1);//设置每个柱子之间的距离plot.setRenderer(renderer1);//让上面对柱子的设置生效StringimageFileName=ServletUtilities.saveChartAsJPEG(chart1,300,20 0,session);//生成图片,包括图片的大小session.setAttribute("image_name3",imageFileName);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName;session.setAttribute("image_url3",URL);四、线图DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();defaultcategorydataset.addValue(212D, "Classes", "JDK 1.0");defaultcategorydataset.addValue(504D, "Classes", "JDK 1.1");defaultcategorydataset.addValue(1520D, "Classes", "SDK 1.2");defaultcategorydataset.addValue(1842D, "Classes", "SDK 1.3");defaultcategorydataset.addValue(2991D, "Classes", "SDK 1.4");JFreeChart jfreechart = ChartFactory.createLineChart("Java Standard Class Library", "线图", "Class Count", defaultcategorydataset, PlotOrientation.VERTICAL, false, true, false);jfreechart.addSubtitle(new TextTitle("Number of Classes By Release"));TextTitle texttitle = new TextTitle("线图");texttitle.setFont(new Font("SansSerif", 0, 10));texttitle.setPosition(RectangleEdge.BOTTOM);texttitle.setHorizontalAlignment(HorizontalAlignment.RIGH T);jfreechart.addSubtitle(texttitle);jfreechart.setBackgroundPaint(Color.white);CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();categoryplot.setBackgroundPaint(Color.lightGray);categoryplot.setRangeGridlinePaint(Color.white);NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();numberaxis.setStandardTickUnits(NumberAxis.createInteger TickUnits());LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();lineandshaperenderer.setShapesVisible(true);lineandshaperenderer.setDrawOutlines(true);lineandshaperenderer.setUseFillPaint(true);lineandshaperenderer.setFillPaint(Color.white);String imageFileName4 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name4",imageFileName4);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName4;session.setAttribute("image_url4",URL);五、时序图TimeSeries timeseries = new TimeSeries("Random Data");Dayday = new Day(1, 1, 1990);double d = 100D;for(int j = 0; j < 4000; j++)try{d = (d + Math.random()) - 0.5D;timeseries.add(day, new Double(d));day = (Day)day.next();}catch(SeriesException seriesexception){System.err.println("Error adding to series");}XYDataset xydataset = new TimeSeriesCollection(timeseries);JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("时序图", "Day", "Value", xydataset, false, false, false);XYPlot xyplot = (XYPlot)jfreechart.getPlot();XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();xylineandshaperenderer.setDefaultShapesVisible(false);xylineandshaperenderer.setSeriesStroke(0, new BasicStroke(0.5F, 1, 1, 5F, new float[] {5F, 10F}, 0.0F));xyplot.setRenderer(xylineandshaperenderer);String imageFileName5 = ServletUtilities.saveChartAsJPEG(jfreechart,500,500,session);session.setAttribute("image_name5",imageFileName5);StringURL=request.getContextPath()+"/servlet/DisplayChart?filename ="+imageFileName5;session.setAttribute("image_url5",URL);。
JFreechart柱状图、柱子的粗细
Jfreechart中,只要明白两个东西就好办了:dataset(数据集):用来填充需要显示的数据。
plot(绘图):用来绘图,来设置图表的样子。
下面是我自己的一些总结资料:JFreeChart chart=ChartFactory.createBarChart3D("按"+title+"统计", "", "", getdataCategory(S QL,cxtj), PlotOrientation.VERTICAL, true, false, false);// ChartFactory.createBarChart3D( 图表标题, 目录轴的显示标签, 数值轴的显示标签,数据集, 图表方向:水平、垂直, 是否显示图例(对于简单的柱状图必须是false), 是否生成工具, 是否生成URL链接);chart.setBackgroundPaint(Color.white);CategoryPlot plot = chart.getCategoryPlot();BarRenderer render = (BarRenderer) plot.getRenderer();// 2,设置详细图表的显示细节部分的背景颜色plot.setBackgroundPaint(Color.PINK);// 3,设置垂直网格线颜色plot.setDomainGridlinePaint(Color.black);//4,设置是否显示垂直网格线plot.setDomainGridlinesVisible(true);//5,设置水平网格线颜色plot.setRangeGridlinePaint(Color.black);//6,设置是否显示水平网格线plot.setRangeGridlinesVisible(false);/*------设置X轴标题的倾斜程度----*/CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));/*------设置柱状体与图片边框的左右间距--*/domainAxis.setLowerMargin(0.01);domainAxis.setUpperMargin(0.01);/*------设置柱状体与图片边框的上下间距---*/ValueAxis rAxis = plot.getRangeAxis();rAxis.setUpperMargin(0.15);rAxis.setLowerMargin(0.15);/*---------设置每一组柱状体之间的间隔---------*/render.setItemMargin(0.0);chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);/*----------设置标题字体--------------------------*/TextTitle textTitle = chart.getTitle();textTitle.setFont(new Font("黑体", Font.PLAIN, 20));/*------设置X轴坐标上的文字-----------*/domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 14));/*------设置X轴的标题文字------------*/domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));/*------设置Y轴坐标上的文字-----------*/rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));/*------设置Y轴的标题文字------------*/chart.getLegend().setItemFont(new Font("宋体",Font.PLAIN,16));/*------这句代码解决了底部汉字乱码的问题-----------*/rAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));我目前也正在使用Jfreemark,希望能帮助你,大家相互学习。
使用 JFreeChart来创建基于web的图表
使用JFreeChart来创建基于web的图表WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。
传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。
但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。
为了能在web浏览器上显示要求用户界面使用HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。
回到本文的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。
第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。
因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。
一.J FreeChart项目简介JFreeChart是开放源代码站点上的一个JA V A项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
这些不同式样的图表基本上可以满足目前的要求。
为了减少篇幅本文主要介绍前面三种类型的图表,读者可以触类旁通去开发其他样式的图表。
下面几个是JFreeChart产生的这三种类型图表的结果:图1图2图3上面的三个图都是表示四个季度的某个产品的销量信息。
在继续下面小节之前必须先准备好开发环境,因为是基于WEB浏览器的图表展现,因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphere,Tomcat等)。
WEB环境的搭建就不累赘了,读者根据喜好自行安装。
JFreeChart引擎本身需要到上下载,地址如下:下载的时候需要注意的是必须下载两个文件:JFreeChart以及Jcommon。
JFreeChart使用流程
JFreeChart使用流程JFreeChart,开放源代码的Java图表生成组件,可以创建饼图、曲线图、柱状图、甘特图,生成PNG、JPG等图片格式文件。
一.安装配置我们以版本0.9.20为例,下载jfreechart-0 .9.20.zip解压缩文件,jfreechart-0.9.20目录下的jfreechart-0.9.20.jar和lib/jcommon-0.9.5.jar,都是开发运行需要的文件,把这三个文件放置到应用的lib目录下。
然后在web.xml文件中增加以下内容:安装配置完成,现在可以写程序生成我们需要的图表了。
二.后台画图流程以画柱状图为例,1.准备数据(a) 首先利用JFreeChart提供的DefaultCategoryDataset类创建一个数据集合对象,即:DefaultCategoryDataset dataset = new DefaultCategoryDataset();(b) 连接数据库,获取画图所需数据;(c) 通过DefaultCategoryDataset 中的addV alue()方法将数据加载进数据集合对象dataset,即dataset.addV alue(纵坐标值,每个柱的标题,横坐标值);2.创建图表对象其中ChartFactory类中有创建各种类型图表的方法,org.jfree.chart.JfreeChart类中也有三个创建图表对象的构造函数,可以根据自己的需要进行调用。
3.对图表对象进行设置通过CategoryPlot类和BarRenderer类对图表对象的一些属性进行设置,如图的背景色、柱之间的距离、图的链接、图标题的字体等。
4.生成图表文件在临时文件夹中生成图表文件,可以定制图表的高度和宽度。
filename为图表文件名,即:5.将图表文件写入PrintWriter中,其中pw为PrintWriter对象;三.前台开发在jsp页面中,调用后台画图JavaBean生成图表文件并返回图表文件名称,通过一个叫DisplayChart的servlet(即上面web.xml文件描述的那个servlet)来显示图表。
JFreeChart绘制报表
JFreeChart常用类介绍 常用类介绍
Plot(接口)
描述:对生成的报表图形进行绘图的功能. 所属类包:org.jfree.chart.plot -CategoryPlot:实现Plot接口,用于折线图, 柱状图的绘图类 -PiePlot:实现Plot接口,用于饼图的绘图类 -XYPlot:实现Plot接口,用于时序图的绘图类
JFreeChart的使用 的使用
数据集的创建:
3,适用于柱形,线形图的数据集 TimeSeriesCollection tsCollection = new TimeSeriesCollection(); TimeSeries ts1 = new TimeSeries("R1"); ts1.add(new TimeSeriesDataItem(new Day(1, 2, 2009), 0.56D)); ts1.add(new TimeSeriesDataItem(new Day(2, 2, 2009), 0.56D)); ts1.add(new TimeSeriesDataItem(new Day(3, 2, 2009), 0.51D)); ts1.add(new TimeSeriesDataItem(new Day(4, 2, 2009), 0.52D)); ts1.add(new TimeSeriesDataItem(new Day(5, 2, 2009), 0.35D)); ts1.add(new TimeSeriesDataItem(new Day(6, 2, 2009), 0.67D)); ts1.add(new TimeSeriesDataItem(new Day(7, 2, 2009), 0.81D)); ts1.add(new TimeSeriesDataItem(new Day(8, 2, 2009), 0.44D));
java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)
java利⽤JFreeChart实现各种数据统计图(柱形图,饼图,折线图)最近在做数据挖掘的课程设计,需要将数据分析的结果很直观的展现给⽤户,这就要⽤到数据统计图,要实现这个功能就需要⼏个第三⽅包了:1. jfreechart-1.0.13.jar2. jcommon-1.0.16.jar3. gnujaxp.jar先来看⼀下,最终效果图:主要是jfreechart-1.0.13.jar,但这三个包要齐全,我已经将所有与jfreechart有关的jar包与本⽂实例的⼯程(代码)⼀同压缩上传了,有兴趣的同学可以下载,接下来,我们⼀步步来实现本程序。
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在项目开发中实现图形报表的应用探讨
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生成走势图使用说明及交叉报表和走势图异常处理
Jfreechart生成走势图使用说明及交叉报表和走势图异常处理在项目fit的com.ssrt.util包中的CreatePicByJFreeChart类中有个createXYLinePic ()方法,根据传入的参数来用jfreechart写图片,该方法有8个参数:1.@param List list生成图所需要的list集合2.@param String CateGory X轴对应的字段3.@param String value Y轴对应的字段4.@param String series底部显示的标题,是区分多条线对应的字段5.@param int width生成图片的宽6.@param int height生成图片的高7. @param HttpServletRequest request当前的request8.@param String picDir要生成图片存储的目录,默认为images1个返回值:* @return String 返回生成图片的全路径和名称。
使用该方法的流程如下:一、用ireport3.0制作报表文件(.jasper),通过添加一个Image控件,然后用jfreechart生成一个图片,为其调用。
1.首先,在交叉报表下面添加一个Image控件,如图1.1所示:将此控件添加到交叉报表下面效果图1.1 添加Image控件2.添加一个Parameter名为“src”,作为Image的图片地址备用,鼠标单击Image控件选择“属性”,在弹出的对话框中选择“Image”标签,在“Image Expression”中输入“$P{src}”,如图1.2所示:设置Image控件的Image Expression属性。
图1.2 设置Image控件的“Image Expression”属性到此Image控件就添加完成了。
二、在action中调用createXYLinePic方法生成图片,并为Parameter“src”设置图片地址。
jFreeChart图形显示设置(柱状图)
custombarrender3d.setSeriesOutlinePaint(0,
2.3f,
4.5f));//标签显示与设定位置的距离
custombarrender3d.setItemLabelAnchorOffset(10D);//设置每个基站所包含的平行柱的之间距离
BarRender3D是Render的一个实现类。在这个类中包含对3D柱状图的数据区的显示设置。BarRender3D含有3D背景的设置、柱体的设置、柱体间距的设置等等,例如:
//3D柱状图显示设置对象
BarRender3D render3d =newBarRender3D();// 3D坐标轴的墙体颜色
TextTitle title = chart.getTitle();
//设置chart图标题的字体
title.setFont(newFont("黑体", Font.CENTER_BASELINE, 24));//X轴字体
CategoryAxis domainAxisTemp = plot.getDomainAxis();
privateJFreeChart createChartPole(CategoryDataset dcd) {//构造基本的JFreeChart
setTitle(Title);
setXAxisTitle(x);
setYAxot = (CategoryPlot)chart.getPlot();
custombarrender3d.setSeriesItemLabelFont(1, new Font("宋体",//各柱体的宽度
custombarrender3d.setMaximumBarWidth(
jFreeChart图形显示设置(柱状图)
jFreeChart图形显⽰设置(柱状图)jFreeChart图形显⽰设置(柱状图)说明表//BarRenderer3Dprivate JFreeChart createChartPole(CategoryDataset dcd) { // 构造基本的JFreeChartsetTitle(Title);setXAxisTitle(x);setYAxisTitle(y);JFreeChart chart = ChartFactory.createBarChart3D(getTitle(), getXAxisTitle(), getYAxisTitle(), dcd, PlotOrientation.VERTICAL, true, true, false);CategoryPlot plot = (CategoryPlot)chart.getPlot();BarRenderer3D custombarrenderer3d = new BarRenderer3D();//设置图例LegendTitle legtitle = chart.getLegend();//设置图例字体legtitle.setItemFont(new Font("⿊体", Font.ROMAN_BASELINE, 15));//取得chart图的标题TextTitle title = chart.getTitle();//设置chart图标题的字体title.setFont(new Font("⿊体", Font.CENTER_BASELINE, 24));//X轴字体CategoryAxis domainAxisTemp = plot.getDomainAxis();domainAxisTemp.setLabelFont(new Font("⿊体", Font.ROMAN_BASELINE, 12));//设置x轴各项标题的字体domainAxisTemp.setTickLabelFont(new Font("⿊体",Font.ROMAN_BASELINE, 12));domainAxisTemp.setTickLabelPaint(Color.BLUE);//Y轴字体ValueAxis rangeAxis = plot.getRangeAxis();rangeAxis.setLabelFont(new Font("⿊体", Font.ROMAN_BASELINE, 12));//custombarrenderer3d.setBaseOutlinePaint(Color.blue);custombarrenderer3d.setWallPaint(Color.lightGray);// 3D坐标轴的墙体颜⾊custombarrenderer3d.setMinimumBarLength(0.01);custombarrenderer3d.setMaximumBarWidth(0.05);//控制X轴坐标点⽂字⾓度当X轴的坐标点超过15个时,⽂字⾓度调整为45度向上if(dcd.getColumnCount() > 8){chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions (CategoryLabelPositions.DOWN_45); // 设置坐标点标记与坐标轴之间的距离//jfreechart.getCategoryPlot().getDomainAxis().setCategoryLabelPosi tionOffset(50);//jf.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI/6));}// 显⽰每个柱的数值,并修改该数值的字体属性custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());// custombarrenderer3d.setBaseItemLabelFont(new Font("⿊体", Font.ROMAN_BASELINE, 12)); custombarrenderer3d.setBaseItemLabelFont(new Font("⿊体", Font.CENTER_BASELINE, 15));//是否显⽰柱的数值标签custombarrenderer3d.setBaseItemLabelsVisible(true);// 每个柱的数值,标签显⽰的⽅式及位置custombarrenderer3d.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));// 标签显⽰与设定位置的距离custombarrenderer3d.setItemLabelAnchorOffset(10D);// 设置每个基站所包含的平⾏柱的之间距离custombarrenderer3d.setItemMargin(0.05D);// 设置柱的颜⾊custombarrenderer3d.setSeriesPaint(0,Color.getHSBColor(3.5f, 2.3f, 4.5f));// 设置柱的 Outline 颜⾊custombarrenderer3d.setSeriesOutlinePaint(0, Color.BLACK);//为单个柱体设置字体,"1"为柱体的序号// custombarrenderer3d.setSeriesItemLabelFont(1, new Font("宋体", Font.CENTER_BASELINE, 72));// 各柱体的宽度custombarrenderer3d.setMaximumBarWidth(0.050000000000000003D);plot.setRenderer(custombarrenderer3d);return chart;}。
JFreeChart使用详细教程
1页
JFreeChart的下载与使用
JFreeChart是开放源代码的图形报表组件(开源 站点上的一个Jave项目),其主页为 /jfreechart/index.html。 在主页中单击DOWNLOAD导航链接将进入下 载页面,选择所要下载的JfreeChart版本即可进行下 载,目前最新版本为1.0.13。 在下载成功后将得到一个名为jfreechart1.0.13.zip的压缩包,此压缩包包含JFreeChart组件源 码、示例、支持类库等文件,将其解压缩后的文件 结构如右图所示。
3页
饼形图:一个划分为几个 饼形图 扇区的圆形图表,用于描述量、 频率或百分比之间的相对关系。 在饼图中,每个扇区的弧长 (以及(圆心角)和面积)大 小为其所表示的数量的比例。 这些扇区合在一起刚好是一个 完全的圆形。顾名思义,这些 扇区拼成了一个切开的饼形图 案。
JFreeChart开发前准备
开发前的准备,JfreeChart开发环境的搭建分为两步:导入 JFreeChart组件包;配置JFreeChart。 1、导入JFreeChart包:导入在lib目录下的jfreechart1.0.13.jar、jcommon-1.0.16.jar两个Jar包到工程。 2、配置JFreeChart: JFreeChart组件能够成.JPEG、.PNG 格式的图片,其输出方式可以直接存储在硬盘中,也可以交给 JFreeChart组件进行管理。在Web应用中,所生成的图形报表一 般均为动态图表,如果对每次生成的图表都进行直接存储,将
14页
通过此方法生成图片后,调用已注册的JFreeChart提供的 Servlet类DisplayChart,即可获取图片的相对路径。 输出图片在Jsp中的应用关键代码如下,可参照该代码将 其运用到servlet或Struts2的Action中。
通过实例跟我学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详细使用教程
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中类库结构可能不一样,有时候可能需要查源码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
们的业务Action,用来实现跳转。通过给该Action传递参数,
处理数据,生成图片,跳转到页面,流程清晰,也符合我们一 贯的程序设计思维。 我们再来看第二种图片获取方式。该方式没有实际生成图 片,而是通过在Action中将图片的数据流直接写到页面上。首
18页
先该Action不能拥有返回值,无法实现页面跳转,不能作为我 们的业务Action。所以处理业务单元,我们还得有另外的业务 Action。这样就会出现两个问题: 一是参数的传递,比如在页面我们有参数传递给业务Action, 处理完业务,传递一些参数跳转到页面,但这时并没有涉 及到图片的生成,图片的生成是在通过页面中的img标签的 src去请求额外的生成图片的Action,通过数据流方式将图片 写到页面。这样就还会涉及到用来处理图片逻辑的参数的 二次传递,显然这种设计是比较鸡肋的。 二是当一个业务单元中需要多个图片,就得为每张图片设 计一个输出图片数据流的Action,显然不可取。
一般都使用制图工厂ChartFactory类进行创建。
制图工厂ChartFactory是一个抽象类,它不能被实例化,但提供 了创建各种制图对象的方法,如创建柱形图对象、区域图对象、饼形 图对象、折线图对象等方法,这些方法都是静态的方法,可直接创建
JFreeChart对象,并且是属于某一种具体的图表类型的JFreeChart对
12页
如下图所示方法,通过制图工厂对象,创建了一个
JFreeChart对象,其中createDataSet()方法返回数据集对象 作为JFreeChart对象的数据来源。
13页
获取图片
获取图片有两种方式,第一种方式会在tomcat temp目 录生产图片文件,第二种方式采用输出流的方式获取图片, 不会产生垃圾文件。 (1)在输出图片之前,首先要生成JFreeChart组件所 绘制的图片。此操作通过调用ServletUtilities类的 saveChartAsJPEG()方法来实现,它返回一个.JPEG格式的图 片名称。
会产生大量的垃圾文件,时间长了必须进行清理。因此,由
JFreeChart组件进行管理来生成图片是一个不错的选择,它不
仅可以提供图片的路径,而且在查看图片后JFreeChart组件会 自动进行清理。 JFreeChart组件提供了一个Servlet文件用于获取生成的 图片,此Servlet文件存在于JFreeChart组件包中,所以在使 用过程中,需要将其配置到Web.xml文件中。其配置方法如下:
14页
通过此方法生成图片后,调用已注册的JFreeChart提供的 Servlet类DisplayChart,即可获取图片的相对路径。 输出图片在Jsp中的应用关键代码如下,可参照该代码将
其运用到servlet或Struts2的Action中。
15页
(2)如下所示为采用输出流方式输出图片在struts2中的应 用。调用ChartUtilities的writeChartAsJPEG 方法则可直接将图片 输出到页面,而不用存储在硬盘中。
8页
创建数据集
在JFreeChart组件的图形报表技术应用中,绘制一个图表需 要一定的数据,JFreeChart组件通过提供的数据进行计算并绘制 出图表信息。由于在数据的分析计算中并不是单一的数值,绘
制图表时就要为JFreeChart组件提供数据集合。
数据集合对象是用于装载绘制图表所需要的数据集。在 JFreeChart组件中,针对不同图表类型提供了不同的数据集合对 象,它们所具有的作用也是不同的。 常用的数据集对象: DefaultCategoryDataset类:默认的类别数据集合对象,可 用于创建柱形图、折线图、区域图数据集合等。 DefaultPieDataset类:默认的饼形图数据集合对象,可用 于创建饼形图数据集合。
9页
如下图所示方法,则创建了一个可用于绘制图表的 数据集对象。该数据集可以用来用来创建简单的一维柱 状图。不同的图形采用的数据集对象不同,同一数据集 对象设置的数据不同,产生图形数据也不同。所以数据 集生产图形内容、形状的关键。
10页
创建JFreeChart对象
在生成图形报表时,制图对象JFreeChart是必不可少的对象,它 可以直接通过new关键字进行实例化,也可以通过制图工厂 ChartFactory类进行实例化。当使用new关键字进行实例化时,需要 设置大量的属性信息,因为JFreeChart组件提供的图表种类很多,对 于每一种图表都要进行特殊的设置,非常繁琐。因此在使用过程中,
16页
ChartUtilities的writeChartAsJPEG 方法介绍:
如果想在Jsp页面调用该图片,把图片的src请求路径设置为产生 输出流的Action即可,例如:
17页
两种图片获取方式分析
通过对比,我们可发现,第一种图片获取方式是在Action 中生成图片到硬盘,在Action返回时通过给页面传递该图片的 路径来访问图片。这样,在同一个显示页面,无论你有多少个 图片要显示,都可以通过一个Action去生成多个图片,传递其 路径来实现,图片路径只是Action传递的众多参数中的普通一 员。而且该Action能配置返回值,所以该Action实际上就是我
7页
JFreeChart开发流程
JFreeChart分为三个步骤: 创建数据集:创建用来构成JFreeChart图表的数据, JFreeChart图表显示的数据都来源于数据集。 创建JFreeChart对象:JFreeChart类是一个制图对象,它 代表着一种制图类型,在制图过程中,只有在创建制图对 象JFreeChart后,才可以生成实际的图片。 获取图片:获取图片,在web页面显示。
Session失效并不是浏览器关闭时,默认时间是30分钟,可 以自己设置。
20页
至此,经过以上三步,一个简单统计图就展现在页面上了。 通常情况下,为了使所生成的图片更加美观、大方,需要 对所生成的图片进行一定的设置。可以通过以下几个对象对生 成的图片进行设置。 制图工厂对象ChartFactory:该对象提供了一个对图片 主题进行设置的方法。其中standardChartTheme为 StandardChartTheme对象。
以看到利用JFreeChart组件制作的各种图表的样式 及效果;source文件夹为JFreeChart的源代码文件 夹,在此文件夹中可以查看到JFreeChart组件的源 代码;lib文件夹为JFreeChart的支持类库。
3页
常见统计图介绍
柱状图:也称条图、长条图、条状图, 是一种以长方形的长度为变量的表达图形的 统计报告图,由一系列高度不等的纵向条纹 表示数据分布的情况,用来比较两个或以上 的价值(不同时间或者不同条件),只有一 个变量,通常利用于较小的数据集分析。柱
象,使用非常方便。
11页
ChartFactory常用方法及说明如下:
图表类型 方 法 public static JFreeChart createBarChart() 柱形图 public static JFreeChart createBarChart3D() public static JFreeChart createPieChart() 饼形图 public static JFreeChart createPieChart3D() public static JFreeChart createLineChart() 折线图 public static JFreeChart reateLineChart3D() 创建一个3D效果的折线图对象 创建一个3D效果的饼形图对象 创建一个常规的折线图对象 说 明 创建一个常规的柱形图对象 创建一个3D效果的柱形图对象 创建一个常规的饼形图对象
制图对象JFreeChart:通过该对象提供的方法可以对图 片标题字体、背景图片、背景颜色、边框等进行设置。 JFreeChart类常用方法及说明如下表:
21页
方
法
说
明
public void setAntiAlias(boolean flag) public void setBackgroundImage(Image image) public void setBackgroundImageAlignment(int alignment) public void setBackgroundImageAlpha(float alpha) public void setBackgroundPaint(Paint paint) public void setBorderPaint(Paint paint) public void setBorderVisible(boolean visible)
JFreeChart组件可以生成各种各样的图形报表,如常用
的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而 对于同一种类型的图表,JFreeChart组件还提供了不同的表现
方式。
1页
JFreeChart的下载与使用
JFreeChart是开放源代码的图形报表组件(开源 站点上的一个Jave项目),其主页为 /jfreechart/index.html。 在主页中单击DOWNLOAD导航链接将进入下 载页面,选择所要下载的JfreeChart版本即可进行下 载,目前最新版本为1.0.13。
19页
综合分析:图片输出,我们采用第一种方式。但第一种方 式时间久了,会产生大量的垃圾图片文件。JFreeChart也考虑到 了这一问题,为我们设计了一个监听器用来删除垃圾图片。该 监听器的原理是:当session失效时,则删除由该session产生的 图片文件。监听器在web.xml中配置如下:
在下载成功后将得到一个名为jfreechart1.0.13.zip的压缩包,此压缩包包含JFreeChart组件源 码、示例、支持类库等文件,将其解压缩后的文件
结构如右图所示。