JFreeChart 绍介
- 格式:doc
- 大小:82.50 KB
- 文档页数:7
Flex完全是开源的,整个框架源代码都可以在Adobe网站下载。
Flex建立在顶级Flash Player之上,引擎藏在所有Flash内容后,从这方面来说,没有什么是Flash能作而Flex不能作的。
Flex是web标准;MXML是Flex应用程序的标准语言,它允许开发者定制的结构应用,不仅包括布局还包括class结构,非常简单用于标记,这个特性非常方便有 web设计和开发背景的开发者,用类似HTML的MXML开发。
同样,Flex 的ActionScript和JavaScript类似,Flex使用 web标准的CSS控制布局。
Flex对于B/S来说是重量级的,但是对于C/S来说可以是轻量级的。
ExtJS是用Javascript、CSS和Html等技术实现的主要用于创建用户界面,且与后台技术无关的前端Ajax框架,它主要被用来开发RIA(富客户端)的Web 应用。
ExtJS的UI组件模型和开发理念继承于Yahoo用户组件库YUI和Java平台上的Swing,它为开发者屏蔽了大量的Web UI操作以及跨浏览器方面的处理。
ExtJS要比开发者直接针对DOM和W3C对象模型开发Web UI快速而且轻松许多。
无论从Web UI界面美观丰富上还是从功能强大完善上来看,ExtJS都可算得上是Web UI组件库方面的佼佼者,也是一款不可多得的Javascript客户端技术的精品之作。
Ext在Component类基础上,使用面向对象的方法,设计了一系列的组件及控件。
ExtJS 中的组件体系由框架进行了非常大的重构,其中最重要的就是形成了一个结构及层次分明的组件体系,由这些组件形成了Ext 的控件,Ext 组件是由Component类定义,每一种组件都有xtype 属性值,通过该值可以得到一个组件的类型或者是定义一个指定类型的组件。
组件大致可以分为三大类:基本组件、工具栏组件、表单及元素组件。
jQueryEasyUI是一个基于 jQuery 的框架,集成了各种用户界面插件(基于jquery用户界面插件的集合)。
JFREECHART学习总结目录一、JFreeChart简介 (2)二、JFreeChart的获取 (3)三、JFreeChart环境配置 (3)四、JFreeChart功能介绍 (5)五、JFreeChart核心类库介绍 (6)六、JFreeChart支持的图表介绍 (6)七、JFreeChart开发 (7)第一步:建立DataSet数据源 (8)第二步:创造JFreeChart (9)第三步:设置图形显示的属性 (10)第四步:写入图片或输出界面 (11)八、JFREECHART图片在web中的应用 (13)8.1在eclipse中创建tomcat工程 (14)8.2 创建web.xml (14)8.3 配置web.xml (15)8.4 创建含有JFreeChart图片的页面 (16)8.5 配置server.xml (22)8.6测试页面 (24)九、JFreeChart使用的优缺点 (25)1.优点: (25)2.缺点: (26)九、使用JfreeChart开发图表经验总结-------------------------25十、JFreeChart中文API (25)一、JFreeChart简介JFreeChart是开放源代码站点上的一个JA V A项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
这些不同式样的图表基本上可以满足目前的要求。
当在项目中客户需要图标分析时,JFreeChart便是最好的选择,JFreeChart是开源项目,可以方便的从其官方网站上获得其源代码,可以方便的与Swing相结合使用,还可以导入到Web页面中,更是可以方便的利用其工厂方法将图表写入jpeg或者png格式的图片中,本文档将简要介绍小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-1.0.12.zip为例子进行说明。
JFreeChart分为三个步骤:一、创建数据集:创建用来构成JFreeChart图表的数据,JFreeChart图表显示的数据都来源于数据集。
二、创建JFreeChart对象:JFreeChart类是一个制图对象,它代表着一种制图类型,在制图过程中,只有在创建制图对象JFreeChart后,才可以生成实际的图片。
三、获取图片:获取图片,在web页面显示。
常用的数据集对象:DefaultCategoryDataset类:默认的类别数据集合对象,可用于创建柱形图、折线图、区域图数据集合等。
DefaultPieDataset类:默认的饼形图数据集合对象,可用于创建饼形图数据集合。
如下图所示方法,则创建了一个可用于绘制图表的数据集对象。
该数据集可以用来用来创建简单的一维柱状图。
不同的图形采用的数据集对象不同,同一数据集对象设置的数据不同,产生图形数据也不同。
所以数据集生产图形内容、形状的关键。
ChartFactory常用方法及说明如下:图表类型方法说明:柱形图createBarChart() 创建一个常规的柱形图对象createBarChart3D() 创建一个3D效果的柱形图对象饼形图JFreeChart createPieChart() 创建一个常规的饼形图对象createPieChart3D() 创建一个3D效果的饼形图对象折线图createLineChart() 创建一个常规的折线图对象reateLineChart3D() 创建一个3D效果的折线图对象如下图所示方法,通过制图工厂对象,创建了一个JFreeChart对象,其中createDataSet()方法返回数据集对象作为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图形开发指南廊坊市大华夏神农信息技术有限公司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开发包是一个开源的Java图形开发包,它从柱形图,饼形图,到雷达图,蜡烛图等等无所不包,可以在c/s,b/s,甚至是实时环境都能一显身手。
当前的JFreeChart的最新版本为jfreechart-1.0.0-rc1.zip。
可以到/jfreechart/ind...ath环境变量中。
二、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 对象获得它,然后再通过它对图形内部部分(例:折线的类型)调整。
同样,针对不同类型的报表图,它有着不同的子类实现!在下面我们简称它为Renderer三、JFreeChart使用的具体例子在web应用中的例子/** 创建日期2006-8-1* @author:hong* FileName:LineXYChart.java*/package com.hong.bean;import java.awt.Color;import java.awt.Font;import java.io.IOException;import java.io.PrintWriter;import java.text.NumberFormat;import java.text.SimpleDateFormat;import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.entity.StandardEntityCollection;import bels.StandardXYToolTipGenerator; import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYItemRenderer;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.servlet.ServletUtilities;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Day;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.ui.RectangleInsets;/*** @author hong 曲线图的绘制*/public class LineXYChart{/*** 返回生成图片的文件名* @param session* @param pw* @return 生成图片的文件名*/public String getLineXYChart(HttpSession session, PrintWriter pw){XYDataset dataset = this.createDateSet();//建立数据集String fileName = null;//建立JFreeChartJFreeChart chart = ChartFactory.createTimeSeriesChart( "JFreeChart时间曲线序列图", // title"Date", // x-axis label"Price", // y-axis labeldataset, // datatrue, // create legend?true, // generate tooltips?false // generate URLs?);//设置JFreeChart的显示属性,对图形外部部分进行调整chart.setBackgroundPaint(Color.red);//设置曲线图背景色//设置字体大小,形状Font font = new Font("宋体", Font.BOLD, 16);TextTitle title = new TextTitle("JFreeChart时间曲线序列图", font); chart.setTitle(title);XYPlot plot = (XYPlot) chart.getPlot();//获取图形的画布plot.setBackgroundPaint(Color.lightGray);//设置网格背景色plot.setDomainGridlinePaint(Color.green);//设置网格竖线(Domain轴)颜色plot.setRangeGridlinePaint(Color.white);//设置网格横线颜色plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//设置曲线图与xy轴的距离plot.setDomainCrosshairVisible(true);plot.setRangeCrosshairVisible(true);XYItemRenderer r = plot.getRenderer();if (r instanceof XYLineAndShapeRenderer){XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;//renderer.setDefaultShapesVisible(true);//renderer.setDefaultShapesFilled(true);renderer.setShapesFilled(true);renderer.setShapesVisible(true);//设置曲线是否显示数据点}//设置Y轴NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();NumberFormat numFormater = NumberFormat.getNumberInstance(); numFormater.setMinimumFractionDigits(2);numAxis.setNumberFormatOverride(numFormater);//设置提示信息StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator( "{1},{2})", new SimpleDateFormat("MM-dd"),numFormater);r.setToolTipGenerator(tipGenerator);//设置X轴(日期轴)DateAxis axis = (DateAxis) plot.getDomainAxis();axis.setDateFormatOverride(new SimpleDateFormat("MM-dd")); ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());try{fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,session);//生成图片// Write the image map to the PrintWriterChartUtilities.writeImageMap(pw, fileName, info, false);}catch (IOException e){e.printStackTrace();}pw.flush();return fileName;//返回生成图片的文件名}/*** 建立生成图形所需的数据集* @return 返回数据集*/private XYDataset createDateSet(){TimeSeriesCollection dataset = new TimeSeriesCollection();//时间曲线数据集合TimeSeries s1 = new TimeSeries("历史曲线", Day.class);//创建时间数据源,每一个//TimeSeries在图上是一条曲线//s1.add(new Day(day,month,year),value),添加数据点信息s1.add(new Day(1, 2, 2006), 123.51);s1.add(new Day(2, 2, 2006), 122.1);s1.add(new Day(3, 2, 2006), 120.86);s1.add(new Day(4, 2, 2006), 122.50);s1.add(new Day(5, 2, 2006), 123.12);s1.add(new Day(6, 2, 2006), 123.9);s1.add(new Day(7, 2, 2006), 124.47);s1.add(new Day(8, 2, 2006), 124.08);s1.add(new Day(9, 2, 2006), 123.55);s1.add(new Day(10, 2, 2006), 122.53);dataset.addSeries(s1);dataset.setDomainIsPointsInTime(true);return dataset;}}在jsp文件中显示图片首先在Web应用程序部署文件web.xml中添加以下代码:<!-- 图片显示,使用专用的servlet来进行显示,它会完成路径的搜索及映射--><servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/servlet/DisplayChart</url-pattern></servlet-mapping>然后在jsp中显示图片完整的jsp文件:<!--文件名称:timeLine.jsp--><%@ page contentType="text/html;charset=gb2312" pageEncoding="GB2312"%><%@ page import="com.hong.bean.LineXYChart"%><%@ page import = "java.io.PrintWriter" %><%LineXYChart xyChart=new LineXYChart();String fileName=xyChart.getLineXYChart(session,new PrintWriter(out));String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName; %><html></head><title> JFreeChart使用例子</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= fileName %>"></body></html>常见生成方式:对JfreeChart有了初步了解并做好准备工作之后,开始作例子程序试验。
JFreeChart综合应用JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
在这些不同式样的图表上可以满足目前商业系统的要求。
JFreeChart是一种基于JAVA语言的图表开发技术。
JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC 可动态显示任何数据库数据,结合Itext可以输出至PDF文件。
JFreeChart主要是由三个类构成:A)org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session 关闭时,删除临时目中的图象文件。
B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet 用于处理显示图象。
C)org.jfree.chart.servlet.ServletUtilities有一系列方法,例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,用于把文件流发送response。
下面以柱状图和饼图为例,介绍图形创建方法。
1 柱状图org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,比较重要的是 PlotOrientation.VERTICAL 让平行柱垂直显示,而 PlotOrientation.HORIZONTAL 则让平行柱水平显示。
对柱状图影响较大的几个类包括:org.jfree.chart.axis.CategoryAxis、org.jfree.chart.axis.ValueAxis、org.jfree.chart.renderer.BarRenderer、org.jfree.chart.renderer. BarRenderer3D。
JfreeChart与Java2D介绍1、JfreeChart前言随着internet的发展,浏览器所能展现的信息不仅是静态的或简单动态的,还能展示种类报表、图表。
为了创建一个可以在web浏览器上查看的图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。
第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。
因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB 的图表以及使用java自身的绘图功能生成一个web图表。
1.2、JfreeChart概要JFreeChart是开放源代码站点上的一个JAVA项目,它主要用来生成各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
这些不同式样的图表基本上可以满足目前的要求。
JfreeChart帮助文档是需要40美金去购买,但sun网站上有在线的帮助文档。
JFreeChart可以直接生成PNG,JPG等各种形式的文件,为我们开发java项目增加了一部利器。
1.3、JFreeChart核心的对象类1.3.1、JFreeChart中几个核心的对象类1.3.2、类的对应关系1.4、使用介绍1.4.1、JfreeChart包介绍1)包中包含源码、jar包、demo演示包、CHANGELOG.txt,其中源码中包含demo演示的所有类的源代码(JfreeChart0.9.20版本以上源码不全,只能反编译),CHANGELOG.txt日志中的描述了JfreeChart相邻版本的变化(不是所有版本JfreeChart都有)。
2)安装使用时需要安装两个文件:JFreeChart以及Jcommon。
JFreeChart 介绍本介绍针对的是JFreeChart 1.0.6版本进行介绍Range Axis基本上图表中的任何元素都是可以控制的,只要使用相应的方法就可以实现。
建立图表有三个步骤:1.建立一个数据集2.建立相关图表的JFreeChart对象3.将图表输出到相应的设备上柱状图:1.建立数据集DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(y轴数据, 具体项目, x轴数据);2.建立JfreeChart对象JFreeChart chart = ChartFactory.createBarChart("Bar Chart Demo", //图表标题"Category", // x轴标签"Value", // y轴标签dataset, // 数据集PlotOrientation.VERTICAL, // 纵向表示true, // 这个我也不太明白。
true, // 具体项目提示false // URLs链接,好像只能在Pannl中使用);3.输出到浏览器上res.setContentType("image/png");ChartUtilities.writeChartAsPNG(res.getOutputStream(), chart, 700, 300);注:res指Response饼图:1.建立数据集DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue(具体项目, 数值);2.建立JfreeChart对象JFreeChart chart = ChartFactory.createPieChart("Sample Pie Chart", // 标题dataset, //数据集true, // legend 我也不知道是啥true, // 具体项目提示false // URLs链接,好像只能在Pannl中使用);3.输出到浏览器上具体参考柱状图的3,这个步骤在下面将不再重复提及曲线图:曲线图的建立有两种方法下面分别介绍第一种方法:1.建立数据集DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(y轴数据, 具体项目, x轴数据);2.建立JfreeChart对象final JFreeChart chart = ChartFactory.createLineChart("Line Chart Demo 1", // chart title"Type", // domain axis label"Value", // range axis labeldataset, // dataPlotOrientation.VERTICAL, // orientationtrue, // include legendtrue, // tooltipsfalse // urls);第二种方法:1.建立数据集XYSeries series1 = new XYSeries("First");series1.add(1.0, 1.0);series1...XYSeries series2 = new XYSeries("Second");series2.add(1.0, 5.0);series2...XYSeries series3 = new XYSeries("Third");series3.add(3.0, 4.0);series3...XYSeriesCollection dataset = new XYSeriesCollection();dataset.addSeries(series1);dataset.addSeries(series2);dataset.addSeries(series3);2.建立JfreeChart对象JFreeChart chart = ChartFactory.createXYLineChart("Line Chart Demo 2", // chart title"X", // x axis label"Y", // y axis labeldataset, // dataPlotOrientation.VERTICAL, true, // include legendtrue, // tooltipsfalse // urls);图表的一些基本属性介绍:1.JfreeChart相关属性Border属性setBorderVisible() // 设置是否显示边框setBorderPaint() // 设置边框颜色setBorderStroke() // 设置边框样式Title属性TextTitle title = chart.getTitle(); // 取得title实例chart.getTitle().setPosition(RectangleEdge.BOTTOM); // 设置title的显示位置,可以是上、下、左、右chart.setTitle("A Chart Title"); // 设置title的内容如果不需要title,可以这样实现:chart.setTitle(null);subTitle属性一个图表可以有多个子title,下面是建立一个子title方法TextTitle subtitle1 = new TextTitle("A Subtitle");chart.addSubtitle(subtitle1);Title subtitle = chart.getSubtitle(0); // 取得一个子titlechart.getSubtitleCount(); // 取得图表子title个数background color属性chart.setBackgroundPaint(Color.blue); //设置图表背景颜色当如果想给图表设置背景图片时,可以用上面的方法设置nullBackground Image属性chart.setBackgroundImage(.getLogo()); // 设置图片chart.setBackgroundImageAlignment(Align.TOP LEFT); // 设置图片位置chart.setBackgroundImageAlpha(); // 设置背景图片的透明度Rendering Hints属性有待研究。
2.Plot相关属性Plot plot = chart.getPlot(); // 取得Plot对象假如你知道应该取得什么类型的Plot,可以是用下面的方法CategoryPlot plot = chart.getCategoryPlot();XYPlot plot = chart.getXYPlot();当你取得不合适的Plot类型时,会抛出ClassCastException例外。
至于在什么情况下是用合适的Plot类型请参考ChartFactory的说明Background Paint属性plot.setBackgroundPaint(Color.white); // 设置plot背景颜色Background Image属性plot.setBackgroundImage(.getLogo()); // 设置plot背景图片plot.setBackgroundImageAlignment(Align.BOTTOM RIGHT); // 设置图片位置plot.setBackgroundAlpha(); // 设置图片透明度3.Axis相关属性一般的图表都会有两条轴,domain axis 和range axis,当然也存在没有轴的图表,例如饼图。
CategoryPlot和XYPlot都可以取得domain axis和range axisCategoryPlot.getDomainAxis(); // 取得domain axisCategoryPlot.getRangeAxis();// 取得range axis注意:一般来说返回的都是ValueAxis对象,但是CategoryPlot返回的DomainAxis的是CategoryAxisAxis Label属性rangeAxis.setLabel(); // 设置轴标签rangeAxis.setLabelFont();// 设置轴标签的字体rangeAxis.setLabelPaint(); // 设置轴的标签的字体颜色rangeAxis.setLabelInsets(); // 有待调查rangeAxis.setLabelAngle(Math.PI / 2.0); // 转换轴的角度axis.setTickLabelsVisible(false); // Hiding Tick Labelsaxis.setTickMarksVisible(false); // Hiding Tick Marks// Setting the Tick SizeNumberAxis axis = (NumberAxis) plot.getRangeAxis();TickUnits units = NumberAxis.createIntegerTickUnits();axis.setStandardTickUnits(units);多数据轴和组合图表参考附件的源代码MutiAxisAction.java和CombinedChartAction.java,如果想更具体的了解JFreeChart的各种强大的功能,可以参考资料文件夹下面的jfreechart-1.0.0.pdf(因为JFreeChart的教材是要钱的不允许随便下载,但是在网上找不到更新的教材,所以大家凑和着用吧)。
JFreeChart Demo文件夹下面的各个类是图表的各种例子,因为JFreeChart Demo文件夹里面的例子是根据class文件解密得来的,所以里面的文件都没有注释,但是大家可以到上面的JFreeChart Demo (web start)对应着相应的class学习。