jFreeChart教程

合集下载

JFreeChart分为三个步骤

JFreeChart分为三个步骤

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配置方法是什么
jfreechart 配置方法是什么
大家知道 jfreechart 配置方法吗?下面我们就给大家详细介绍一下吧! 1.安装 j2sdk1.4.2_11 配置环境变量 classpath:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATA LINA_HOME%\common\lib\servletapi.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\jspapi.jar;%JAVA_HOME%\lib\jfreechart-1.0.10.jar; java_home:D:\j2sdk1.4.2_11 path:d:\oracle\ora90\bin;d:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32x86;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoo t%\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\CoreStatic;%JAVA_HOME%\bin 2.安装 TOMCAT 5.0
Hale Waihona Puke 配置环境变量 CATALINA_BASE:e:\Tomcat 5.0 CATALINA_HOME:e:\Tomcat 5.0 其他添加内容见上面绿色部分 3.安装 jfreechart-1.0.10 将 E:\jfreechart-1.0.10\jfreechart-1.0.10\lib 下的 gnujaxp.jar iText-2.1.1.jar jcommon-1.0.13.jar jfreechart-1.0.10.jar 拷贝到相应工程目录的 WEB-INF\lib 下 环境变量添加紫色部分内容 web.xml 添加

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学习资料一、新建一个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>三、新建一个ChartDemo类,写一个获得数据集方法1、饼状图数据集private static PieDataset getDataSet() {DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("苹果", 100);dataset.setValue("梨子", 200);dataset.setValue("葡萄", 300);dataset.setValue("香蕉", 400);dataset.setValue("荔枝", 500);return dataset;}2、柱壮图数据集private static CategoryDataset getDataSet2() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "北京", "苹果");dataset.addValue(500, "北京", "荔枝");dataset.addValue(400, "北京", "香蕉");dataset.addValue(200, "北京", "梨子");dataset.addValue(300, "北京", "葡萄");dataset.addValue(500, "上海", "葡萄");dataset.addValue(600, "上海", "梨子");dataset.addValue(400, "上海", "香蕉");dataset.addValue(700, "上海", "苹果");dataset.addValue(300, "上海", "荔枝");dataset.addValue(300, "广州", "苹果");dataset.addValue(200, "广州", "梨子");dataset.addValue(500, "广州", "香蕉");dataset.addValue(400, "广州", "葡萄");dataset.addValue(700, "广州", "荔枝");return dataset;}3、折线图数据集private static CategoryDataset getDataSet2() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "北京", "苹果");dataset.addValue(500, "北京", "荔枝");dataset.addValue(400, "北京", "香蕉");dataset.addValue(200, "北京", "梨子");dataset.addValue(300, "北京", "葡萄");dataset.addValue(500, "上海", "葡萄");dataset.addValue(600, "上海", "梨子");dataset.addValue(400, "上海", "香蕉");dataset.addValue(700, "上海", "苹果");dataset.addValue(300, "上海", "荔枝");dataset.addValue(300, "广州", "苹果");dataset.addValue(200, "广州", "梨子");dataset.addValue(500, "广州", "香蕉");dataset.addValue(400, "广州", "葡萄");dataset.addValue(700, "广州", "荔枝");return dataset;}四、写一个主方法用来构造要显示的图形1、饼状图public static String generatePieChart(HttpSession session, PrintWriter pw,int w, int h){String filename = null;PieDataset dataset = getDataSet();JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题dataset, // 数据集true, // 是否显示图例false, // 是否生成工具false// 是否生成URL链接);chart.setBackgroundPaint(Color.pink);try {/*------得到chart的保存路径----*/ChartRenderingInfo info = new ChartRenderingInfo(newStandardEntityCollection());filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);/*------使用printWriter将文件写出----*/ChartUtilities.writeImageMap(pw, filename, info, true);pw.flush();} catch (IOException e) {e.printStackTrace();}return filename;}2、柱状图public static String generateBarChart(HttpSession session, PrintWriter pw, int w, int h){String filename = null;CategoryDataset dataset = getDataSet2();JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false// 是否生成URL链接);try {/*------得到chart的保存路径----*/ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);/*------使用printWriter将文件写出----*/ChartUtilities.writeImageMap(pw, filename, info, true);pw.flush();} catch (IOException e) {// TODO自动生成 catch 块e.printStackTrace();}return filename;}3、折线图public static String generateLineChart(HttpSession session, PrintWriter pw, int w, int h){String filename = null;CategoryDataset dataset = getDataSet2();JFreeChart chart = ChartFactory.createLineChart("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false// 是否生成URL链接);/*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);/*------------配置图表属性--------------*/// 1,设置整个图表背景颜色chart.setBackgroundPaint(Color.pink);/*------------设定Plot参数-------------*/CategoryPlot plot = chart.getCategoryPlot();// 2,设置详细图表的显示细节部分的背景颜色//plot.setBackgroundPaint(Color.PINK);// 3,设置垂直网格线颜色plot.setDomainGridlinePaint(Color.black);//4,设置是否显示垂直网格线plot.setDomainGridlinesVisible(true);//5,设置水平网格线颜色plot.setRangeGridlinePaint(Color.blue);//6,设置是否显示水平网格线plot.setRangeGridlinesVisible(true);try {/*------得到chart的保存路径----*/ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);/*------使用printWriter将文件写出----*/ChartUtilities.writeImageMap(pw, filename, info, true);pw.flush();} catch (IOException e) {// TODO自动生成 catch 块e.printStackTrace();}return filename;}五、写一个调用JfreeChart的显示页面<%@ page contentType="text/html;charset=GBK"%><%@ page import="java.io.PrintWriter"%><jsp:directive.page import=".ChartDemo"/><html><head><title></title><%//以下部分为折线图象输出(调用不同的方法生成不同类型的图形)String fileName=ChartDemo.generateLineChart(session,newPrintWriter(out),580,250);String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="+ fileName;%></head><body bgcolor="#ffffff"><table width="580" border="0" cellspacing="0" cellpadding="0"><tr><td><img src="<%= graphURL %>"width=580 height=250 border=0 ></td></tr></table></body></html>六、将项目发布到web服务器,启动web服务器。

JFreeChart开发步骤

JFreeChart开发步骤

JFreeChart开发步骤1:提供一个Dataset实例,该实例里包含了创建统计图表的数据。

提示:不同的统计图表所使用的Dataset实例不一样,例如,饼图使用PieDataset实例作为饼图数据;而柱状图则采用CategoryDataset作为柱状图数据。

2:使用ChartFactory的多个工厂方法createXxxChart来创建统计图表,统计图表就是一个JFreeChart对象。

例如:JFreeChart jfreechart = ChartFactory.createPieChart(”图形标题名称”,dataset /*数据*/ ,true /*是否显示图例*/ ,false /*是否显示工具提示*/ ,false /*是否生成URL*/);/*如果把createPieChart改成createPieChart3D,是3D效果*/3:得到了JFreeChart对象后,可以调用setTitle来修改统计图表的标题;或者调用getLegend方法来获得指定索引的图表图例,取得图例对象后即可修改图表的图例。

(如2中口号内的内容)4:通过JFreeChart对象的getPlot方法,即可获得图表的Plot对象,该对象对应于统计图表的实际图表部分,可以调用Plot对象的方法来修改图表中的各种显示内容。

按照以上4个步骤进行,即可快速开发出各种简单的JFreeChart图表.在上面步骤中,共涉及到JFreeChart的如下核心API:1)XxxDataset:这是一个数据集对象,用于提供显示图表所用的数据。

对于不同类型的统计图表,也需要使用不同的Dataset对象。

2)ChartFactory:该对象是一个图表工厂类,通过调用该工厂类的不同方法,即可生成不同的统计图表。

3)JFreeChart:统计图表对象,JFreeChart由如下3个部分组成:TextTitle(标题)、LegendTitle(图例标题)和XxxPlot(实际统计图)。

JFreeChart生成报表并生成PDF文件封装方法使用

JFreeChart生成报表并生成PDF文件封装方法使用

用到的文件:1.JFreeChart2.Itext3.Sturts2调用方法:1.在action中定义属性jfreeChartForm并获取其get和set方法2.在action 中定义接口属性Ijfreechart并获取其get和set方法3.调用接口Ijfreechart中的方法方法/***柱状图的实现**@param doubleList*数据集*@param rowKeys*每列的数据分类*@param columnKeys*列的分类*@param xTitle*x轴标题*@param yTitle*y轴标题*@param chartTitle*图片的标题*@param barColorList*柱子颜色*@param groupColor*图片背景颜色*@param backgroundPaint*柱状图背景颜色*@return文件名称表示成功null表示有错误产生*/String barChart(List<double[]> doubleList, String[] rowKeys, String[] columnKeys, String xTitle, String yTitle,String chartTitle, List<Color> barColorList,Color BackgroundColor, Color backgroundPaint);例子(生成图片如下):Action中的方法public String makeBarGroupChart() {String result = "";// 设置X轴标题String xTitle = "年份";// 设置X轴列名称String[] columnKeys = { "2011", "2012", "2013" };// 设置Y轴标题String yTitle = "设备数量";//初始化数据List<double[]> doubleList = new ArrayList<double[]>();String[] rowKeys = new String[]{"vpp设备","vph设备","工作站主机"};//添加数据doubleList.add(new double[] { 100, 150, 200 });doubleList.add(new double[] { 80, 130, 170 });doubleList.add(new double[] { 120, 170, 220 });// 设置图片标题String chartTitle = "设备数量图";// 获取每个柱子颜色的List<Color> (注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)List<Color> barColorList = new ArrayList<Color>();barColorList.add(new Color(127,255,212));barColorList.add(new Color(220,220,220));barColorList.add(new Color(152,251,152));//定义图片背景颜色Color backgroundColor = Color.white;//定义柱形图颜色Color barColor = new Color(238,220,130);//调用方法生成图片获取返回值String fileName = this.jfreechart.barChart(doubleList, rowKeys, columnKeys, xTitle, yTitle, chartTitle, barColorList,backgroundColor, barColor);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}效果图:在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">/***饼状图**@param data*数据集*@param datadescription*数据的业务逻辑*@param chartTitle*图片标题*@param pieKeys*分饼名称*@param pieColorList*分饼颜色*@param pieChartColor*饼图颜色*@param backgroundColor*图片背景色*@return 文件名称表示成功null表示有错误产生*/String createValidityComparePimChar(double[] data,String[] datadescription, String chartTitle, String[]pieKeys,List<Color> pieColorList, Color pieChartColor, ColorbackgroundColor);例子(生成图片如下):Action中的方法public String makePieChart() {String result = "";List<String> userNameList = erName();String[] Keys = new String[]{"vpp设备使用人数","vph设备使用人数","工作站设备使用人数"};//初始化数据double[] doubleList = new double[]{70,50,80};List<Color> barColorList = new ArrayList<Color>();Color backgroundColor = null;Color pieChartColor = null;String fileName =this.jfreechart.createValidityComparePimChar(doubleList, Keys,"饼状图", Keys, barColorList,pieChartColor, backgroundColor);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}效果图:在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">/***折线图**@param rowKeys*每条线的数据点*@param columnKeys*X轴上的列名*@param chartTitle*图片标题*@param xName*x轴标题*@param yName*y轴标题*@param xyDataset*数据集*@return 文件名称表示成功null表示有错误产生*/String createTimeXYChar(String[] rowKeys, String[] columnKeys, String chartTitle, String xName, String yName,List<double[]> xyDataset, Color backgroundColor,Color lineChartColor, List<Color> barColorList);例子(生成图片如下):Action中的方法public String makeLineAndShapeChart() {String result = "";String xTitle = "年份";// 设置X轴列名称String[] columnKeys = { "2011", "2012", "2013" };// 设置Y轴标题String yTitle = "设备数量";//初始化数据List<double[]> doubleList = new ArrayList<double[]>();//添加数据String[] rowKeys = new String[]{"vpp设备","vph设备","工作站主机"};doubleList.add(new double[] { 100, 150, 200 });doubleList.add(new double[] { 80, 130, 170 });doubleList.add(new double[] { 120, 170, 220 });List<String> userNameList = erName();//设置图片背景色Color backgroundColor = null;//设置折线图背景色Color LineChartColor = null;//设置线的颜色List<Color> barColorList = new ArrayList<Color>();String fileName = this.jfreechart.createTimeXYChar(rowKeys, columnKeys, "折线图",xTitle, yTitle, doubleList,backgroundColor, LineChartColor, barColorList);this.jfreeChartForm = new JFreeChartForm();this.jfreeChartForm.setFileName(fileName);if(fileName == null || fileName == ""){result = ERROR;}else{result = SUCCESS;}return result;}在JSP上的调用方法:<imgsrc="${pageContext.request.contextPath}/web/report/images/temp/${jfre eChartForm.fileName}">下面是封装的方法:JFreeChart类:package .bis.gms.jfreechart;import java.awt.Color;import java.awt.Font;import java.awt.RenderingHints;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.PageContext;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import ng.StringUtils;import org.apache.struts2.ServletActionContext;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.ValueAxis;import bels.StandardCategoryItemLabelGenerator; import bels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.DefaultFontMapper;import com.lowagie.text.pdf.FontMapper;import .bis.core.base.web.action.BaseAction;import java.awt.Graphics2D;import java.awt.geom.Rectangle2D;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.servlet.ServletUtilities;import org.jfree.data.time.Month;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import com.lowagie.text.BadElementException;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Element;import com.lowagie.text.Image;import com.lowagie.text.Paragraph;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.DefaultFontMapper;import com.lowagie.text.pdf.FontMapper;import com.lowagie.text.pdf.PdfContentByte;import com.lowagie.text.pdf.PdfPCell;import com.lowagie.text.pdf.PdfPTable;import com.lowagie.text.pdf.PdfTemplate;import com.lowagie.text.pdf.PdfWriter;public class JfreeChart extends BaseAction implements Ijfreechart { public static final long serialVersionUID = 1;private String fileName;/***柱状图的实现**@param doubleList*数据集*@param rowKeys*每列的数据分类*@param columnKeys*列的分类*@param xTitle*x轴标题*@param yTitle*y轴标题*@param chartTitle*图片的标题*@param barColorList*柱子颜色*@param groupColor*图片背景颜色*@param backgroundPaint*柱状图背景颜色*@return文件名称表示成功null表示有错误产生*/public String barChart(List<double[]> doubleList, String[] rowKeys, String[] columnKeys, String xName, String yName, String chartTitle,List<Color> barColorList, Color backgroundColor,Color backgroundPaint) {// 初始化返回值String m_Result = "";// 校验传入的参数是否有误this.verifyInputBarValue(doubleList, rowKeys, columnKeys, xName, yName,chartTitle, barColorList, backgroundColor);// 表示没有存在有错误内容if (super.getFieldErrors().size() == 0) {// 初始化二维数组double[][] data = new double[doubleList.size()][];// 获取数据for (int i = 0; i < doubleList.size(); i++) {data[i] = doubleList.get(i);}// 根据数据获取支持生成图片的数据集CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);// 创建JFreChart对象JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)true, // 是否生成工具true// 是否生成URL链接);// 设置字体格式(整体的字体格式)Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);// 设置文字锯齿chart.setTextAntiAlias(true);chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASIN G,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);// 判断背景图片颜色是否设置if (backgroundColor == null) {// 设置默认颜色backgroundColor = Color.lightGray;} else {// 设置背景色chart.setBackgroundPaint(backgroundColor);}// 创建 plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 数据轴数据标签的显示格式DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df);// x轴设置CategoryAxis domainAxis = plot.getDomainAxis();// x轴标题domainAxis.setLabelFont(labelFont);// x轴数值domainAxis.setTickLabelFont(labelFont);// 横轴上的Lable是否完整显示domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);// 设置距离图片顶端距离plot.setDomainAxis(domainAxis);// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)if (backgroundPaint == null) {// 设置默认值plot.setBackgroundPaint(new Color(255, 255, 204));} else {// 将传入的参数设置为背景色plot.setBackgroundPaint(backgroundPaint);}// 设置X轴完毕// y轴设置// 获取y轴ValueAxis rangeAxis = plot.getRangeAxis();// y轴标题字体设置rangeAxis.setLabelFont(labelFont);// y轴数值字体设置rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个 Item 与图片顶端的距离rangeAxis.setUpperMargin(0.2);// 设置最低的一个 Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);// 初始化柱子对象BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.1);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// 设置柱的颜色// 判断柱子颜色的List是否设置if (barColorList == null || barColorList.size() == 0) { // 设置默认颜色barColorList = new ArrayList<Color>();barColorList.add(Color.DARK_GRAY);} else {for (int i = 0; i < barColorList.size(); i++) {renderer.setSeriesPaint(i, barColorList.get(i));}}// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);// 获取HttpServletResponseHttpServletResponse response =ServletActionContext.getResponse();// 获取HttpServletRequestHttpServletRequest request =ServletActionContext.getRequest();// 解决乱码// X轴文字乱码domainAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 15));// X轴标题乱码domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 17));// Y轴文字乱码rangeAxis.setTickLabelFont(new Font("sans-serif",Font.PLAIN, 15));// Y轴标题乱码rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 17));// 标题乱码Font fontTitle = new Font("宋体", Font.PLAIN, 20);TextTitle title = new TextTitle(chartTitle, fontTitle);chart.setTitle(title);// 说明乱码chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 15));try {// 输出流声称图片//ChartUtilities.writeChartAsPNG(response.getOutputStream(),chart, 700, 500);//response.reset();// 将图片保存为pdf格式fileName= barChartToPDF(chart, request, dataset, 500, 400, chartTitle,xName, yName);request.getInputStream().close();} catch (Exception e) {e.printStackTrace();// 设置返回值fileName = null;} finally {try {} catch (Exception e) {e.printStackTrace();// 设置返回值fileName = null;}}} else {fileName = null;}return fileName;}/***饼状图**@param data*数据集*@param datadescription*数据的业务逻辑*@param chartTitle*图片标题*@param pieKeys*分饼名称*@param pieColorList*分饼颜色*@param pieChartColor*饼图颜色*@param backgroundColor*图片背景色*@return SUCCESS表示成功ERROR表示有错误产生*/public String createValidityComparePimChar(double[] data,String[] datadescription, String chartTitle, String[] pieKeys,List<Color> pieColorList, Color pieChartColor, Color backgroundColor) {// 初始化返回值String m_Result = "";verifyInputPieValue(data, datadescription, chartTitle, pieKeys);if (super.getFieldErrors().size() == 0) {// 初始化一个支持生成饼图的数据集DefaultPieDataset dataset = new DefaultPieDataset();// 判断传入的数据是否为空if (data != null && datadescription != null) {// 判断传入的List长度是否和数据名称一样长if (data.length == datadescription.length) {// 遍历List获取数据for (int i = 0; i < data.length; i++) {// 将遍历到的数据加入数据集dataset.setValue(datadescription[i], data[i]);}}}// 创建JFreeChart对象JFreeChart chart = ChartFactory.createPieChart(chartTitle, // 图片标题dataset,// 支持生成饼图的数据集true,// 是否显示图例(对于简单的柱状图必须是false)true,// 是否生成工具false);// 是否生成URL链接// 使下说明标签字体清晰,去锯齿chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASIN G,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(true);// 图片背景色// 判断是否有图片背景色被传入if (backgroundColor == null) {// 设置图片的默认背景色chart.setBackgroundPaint(new Color(250,240,230));} else {// 设置图片背景色味传入的Colorchart.setBackgroundPaint(backgroundColor);}// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);// 获取PiePlot3D对象PiePlot plot = (PiePlot) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色plot.setBaseSectionOutlinePaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

JFreeChat中文教程(入门篇)

JFreeChat中文教程(入门篇)
dataset.addValue(100, null, "苹果");
dataset.addValue(200, null, "梨子");
dataset.addValue(300, null, "葡萄");
dataset.addValue(400, null, "香蕉");
dataset.addValue(500, null, "荔枝");
at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168)
at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240)
WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提
供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网
上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类
似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使
用HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来
三、使用JFreeChart生成各种样式的图表
四、将生成的图表移到浏览器上
高级主题
参考资料
关于作者
Java 专区中还有:
教学
工具与产品
代码与组件
所有文章
实用技巧
刘冬 (u@)
珠海市创我科技发展有限公司软件工程师

JFreeChart使用流程

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 教程说明书

About the T utorialThis tutorial describes various ways to incorporate JFreeChart in Java-based standalone and web-based applications. The tutorial is categorized into various chapters to provide a comprehensive and easy understanding of JFreeChart programming with Java applications.AudienceThis reference has been prepared for beginners to help them understand the basic-to-advanced concepts related to JFreeChart library.PrerequisitesBefore you start practicing the examples given in the tutorial, it is expected that you have a basic understanding of Java programming with JDK1.6 or later versions, Swing, file management and database management in Java.Copyright & Disclaimer© Copyright 2017 by Tutorials Point (I) Pvt. Ltd.All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any contents or a part of the contents of this e-book in any manner without written consent of the publisher.We strive to update the contents of our website and tutorials as timely and as precisely as possibly; however, the contents may contain inaccuracies or errors. Tutorials Point (I) provides no guarantee regarding the accuracy, timeliness, or completeness of our website or its contents including this tutorial. If you discover any errors on our website or in this tutorial, please notify us at **************************T able of ContentsAbout the Tutorial (i)Audience (i)Prerequisites (i)Copyright & Disclaimer (i)Table of Contents .................................................................................................................................... i i 1.JFREECHART ─ OVERVIE W (1)What is JFreeChart? (1)Why JFreeChart? (1)2.JFREECHART ─ INSTALL ATION (2)System Requirements (2)Installing JFreeChart (2)3.JFREECHART ─ ARCHITE CTURE (6)Class Level Architecture (6)Application Level Architecture (7)4.JFREECHART ─ REFEREN CED APIS (8)ChartFactory Class (8)ChartFrame Class (9)ChartPanel Class (10)ChartUtilities Class (10)JFreeChart Class (11)PiePlot Class (12)PiePlot3D Class (12)PlotOrientation Class (13)XYPlot Class (14)XYLineAndShapeRenderer Class (15)XYItemRenderer general datasets (16)PieDataset (16)DefaultPieDataset Class (16)SeriesException Class (17)DefaultCategoryDataset (17)Series Datasets (18)XYDataset (18)XYZDataset (18)XYSeries (18)XYSeriesCollection (19)Default XYZDataset (20)Time Series in JFreeCharts (20)TimeSeriesCollection (21)Second (22)Frames in JFreeCharts (22)ApplicationFrame (23)RefineryUtilities (23)5.JFREECHART ─ PIE CHA RT (24)Business data (24)AWT Based Application (24)JPEG Image Creation (26)6.JFREECHART ─ BAR CHA RT (28)Business Data (28)AWT Based Application (28)7.JFREECHART ─ LINE CH ART (33)Business Data (33)AWT Based Application (33)JPEG Image Creation (35)8.JFREECHART ─ XY CHAR T (37)Business Data (37)AWT Based Application (38)JPEG Image Creation (40)9.JFREECHART ─ 3D PIE/BAR CHART (43)3D Pie chart (43)3D Bar Chart (45)10.JFREECHART ─ BUBBLE CHART (48)Business Data (48)AWT Based Application (48)JPEG Image Creation (51)11.JFREECHART ─ TIMESER IES CHART (54)Business Data (54)AWT Based Application (54)JPEG Image Creation (56)12.JFREECHART ─ FILE IN TERFACE (59)Business Data (59)Chart Generation Based on File (59)13.JFREECHART ─ DATABAS E INTERFACE (62)Business Data (62)Chart Generation Using Database (62)JFreeChart6A chart is a graphical representation of information. There are various tools available, which can be used to create different types of charts. The JFreeChart project was founded in February 2000, by David Gilbert. Today, it is the most widely used charting library among Java developers.This tutorial will help you understand what exactly JFreeChart is, why is it required, and the various ways to create different types of charts within a Java-based application or independently.What is JFreeChart?JfreeChart is an open source library developed in Java. It can be used within Java based applications to create a wide range of charts. By using JFreeChart, we can create all the major type of 2D and 3D charts such as pie chart, bar chart, line chart, XY chart and 3D charts. Why JFreeChart?JFreeChart is open source and 100% free, which permits usage in the commercial applications without any cost. We have enlisted here some more points in favor of why you should use JFreeChart:∙It comes with well documented APIs, which makes it quite easy to understand. ∙ It supports a wide range of chart types such as Pie Chart, Line Chart, Bar Chart, Area Chart and 3D charts.∙ JFreeChart is easy to extend and can be used in both, the client-side, as well as the server-side applications.∙ It supports multiple output formats like PNG, JPEG, PDF, SVG etc.∙It allows extensive customizations of charts. Consider a situation where you are developing an application and you need to show the data in the form of charts, and the data itself is populated dynamically. In such case, displaying the data in the form of charts using JFreeChart programming is very simple.1.JFreeChart 7JFreeChart is popular for its efficient chart creation and user-friendly installation setup. This chapter describes the process of setting up JFreeChart on Windows and Linux. User administration is needed while installing JFreeChart.System RequirementsInstalling JFreeChartTo install JFreeChart, there are three following steps viz …Step 1: Verifying Java InstallationTo verify Java installation, open the console and execute the following java command:2.Once Java installation is done properly, then you should get the following output for both the operating systems:If you do not have Java installed, then install the Java Software Development Kit (SDK) from the link:/technetwork/java/javase/downloads/index.htmlWe assume that you have installed Java 1.7.0_60 version before proceeding for this tutorial.Step 2: Setting JAVA EnvironmentSet the JAVA_HOME environment variable to point to the base directory location where Java is installed on your machine. For example,Append Java compiler location to System Path.Verify the command java -version from the command prompted as explained above.Step 3: Installing JFreeChart8Download the latest version of JFreeChart.zip from the link /jfreechart/download/. Unzip the downloaded file at any location from where required libraries can be linked into your Java program. The following image shows the structure of the directories and files:Add complete path of jfreechart-1.0.18.jar and jcommon-1.0.22.jar files to the CLASSPATH as shown below:9JFreeChart10This chapter explains basic class level and application level architectures of JFreeChart to give you an idea about how JFreeChart interacts with different classes and how it fits in your Java based application.Class Level ArchitectureThe class level architecture explains how various classes from the library interact with each other to create various types of charts.Following is the detail of the units used in the above block diagram:3.JFreeChartApplication Level ArchitectureThe application level architecture explains where JFreeChart library sits inside a Java Application.The client program receives user data and then it uses standard Java and JFreeChart APIs based on requirements to generate the output in the form of either a frame, which can be displayed directly inside the application or independently in the image formats such as JPEG or PNG.11JFreeChart12In this chapter, we will discuss about some of the important packages, classes, and methods from JFreeChart library. These packages, classes, and methods are the most frequently used while creating a variety of charts using JFreeChart library.ChartFactory ClassChartFactory is an abstract class under the org.jfree.chart package. It provides a collection of utility methods for generating standard charts. Following is a list of few of the important methods:Class ConstructorClass Methods4.ChartFrame ClassChartFrame class under the org.jfree.chart package, provides all frame related functions and utilities. ChartFrame class inherits functionalities from parent classes such as Frame, Window, Container, and Component classes.13Class ConstructorClass MethodChartPanel ClassChartPanel class from the org.jfree.chart package is used as a swing GUI component for displaying JfreeChart object.Class Constructor14Class MethodChartUtilities ClassCharUtilites class from the org.jfree.chart package provides a collection of utility methods of JFreeCharts including methods for converting charts into image file format such as PNG, JPEG, and creating HTML image maps.Class ConstructorClass Method15JFreeChart ClassJFreeChart class is the core class under the org.jfree.chart package. This class provides JFreeChart method to create bar charts, line charts, pie charts, and xy plots including time series data.Class ConstructorClass MethodPiePlot ClassThis class is a part of org.jfree.chart.plot package and extends Plot class from the same package. This class provides methods to create Pie Plots.Class Constructor16Class MethodPiePlot3D ClassPiePlot3D class is a subclass of PiePlot class under the same package. Hence, this class has the same features as PiePlot class, except it is used to create 3D plots.Class ConstructorClass Method17PlotOrientation ClassThis is a serialized class available in org.jfree.chart.plot package and it is used to show the orientation of a 2D plot. The orientation can either be vertical or horizontal. It sets the orientation of Y-axis. A conventional plot has a vertical Y- axis.Field summaryClass MethodXYPlot ClassThis is a general class available in org.jfree.chart.plot package and it is used for the plotting data in the form of (x,y) pairs. This plot can use data from any other class that implements the XYDataSet Interface. XYPlot makes use of a XYItemRenderer to draw each point on the plot.1819Class ConstructorClass MethodNumberAxis ClassThis class is available in org.jfree.chart.axispackage and it can access the numerical data of any axis. When we set the range of any axis to default, it fits according to the range of the data. But using NumberAxis, class we can set the lower margin and upper margin of domain and range axes.Class ConstructorClass MethodXYLineAndShapeRenderer ClassThis is the class, available under org.jfree.chart.renderer.xy package, which takes care of connecting data points with lines and draws shapes at each data point. This renderer class is designed for use with the XYPlot class.Class ConstructorClass Method20XYItemRenderer general datasetsThis is an interface for rendering the format of a single (x, y) item on a XYPlot. The package is org.Jfree.data.general, which has classes and interfaces to define different types of datasets to construct charts.PieDatasetThis is an interface used as a general purpose dataset, where values are associated with keys. As the name suggests, you can use this dataset to supply data for pie charts. This interface extends KeyedValues and DataSet interfaces. All the methods used for this interface are taken from KeyedValues, Values, and Dataset interfaces.DefaultPieDataset ClassThis is a Default implementation class of a PieDataset interface.Class ConstructorClass Method21SeriesException ClassThis is an exception class. It raises an exception occurred in the time series of data in the dataset. Exceptions are raised on the occurrence of duplicate or invalid data. The time series must not be applied with duplicates and the format must be valid. DefaultCategoryDatasetThis is a default implementation class of CategoryDataset interface.Class ConstructorClass Method22Refer JFreeChart API for more information on various other methods and fields.Series DatasetsThe series dataset is used by XY charts. The package is org.Jfree.data.xy, which contains classes and interfaces belonging to xy charts. The core interface is XYDataset. XYDatasetThis is an interface through which data in the form of (x,y) items can be accessed. As the name suggests, you can use this dataset to serve XY chart. Some of the methods in this interface are taken from SeriesDateset interface.XYZDatasetThis is an interface through which data in the form of (x,y,z) items can be accessed. As the name suggests, you can use this dataset to serve XYZ chart. Some of the methods in this interface are taken from SeriesDateset.XYSeriesThis is a class, which represents a sequence of zero or more data items in the form (x, y). By default, the items in the series are sorted into ascending order by x-value, and duplicate x-values are permitted. Both the sorting and duplicate defaults can be changed in the constructor. Y-values can be denoted as null to represent missing values.Class Constructor23Class MethodThe above method is used in the tutorial example. If you want to learn the remaining methods and fields, please refer JFreeChart API.XYSeriesCollectionXYSeriesCollection class has parent classes like AbstractIntervelDataset, AbstractXYDatset, AbstractSeriesDataset and AbstractDataset. Some of the methods in this class belong to parent classes of this class.Class ConstructorClass Method2425Refer JFreeChart API for the remaining methods and fields.Default XYZDatasetDefaultXYZDataset class have parent classes like AbstractIntervelDataset, AbstractXYDatset, AbstractSeriesDataset, AbstractDataset and AbstractXYZDataset. Some of the methods in this class belong to parent classes of this class.Class ConstructorClass MethodPlease refer JFreeChart API for the remaining methods and fields.Time Series in JFreeChartsThe package is org.jfree.data.time . This package contains classes and interfaces, which are used for the time related data.TimeSeriesThis class represents a sequence of data items in the form of period values, where period is some instance ofRegularTimePeriod abstract class such as Time, Day, Hour, Minute, and Second classes.Class ConstructorClass MethodRefer JFreeChart API for the remaining methods and fields.TimeSeriesCollectionThis is a class used as a collection of time series objects. This class implements the XYDataset interface, as well as it extends IntervelXYDataset interface. This makes it convenient to collect series data objects.Class ConstructorClass Method26Please refer JFreeChart API for the remaining methods and fields.SecondThis class represents a second in a particular day. This class is immutable, which is a requirement for all RegularTimePeriod subclass.Class ConstructorClass Method27Please refer JFreeChart API for the remaining methods and fields.Frames in JFreeChartsThe package is org.jfree.ui. This is the package belongs to JCommons API of JFreeChart. It contains utility classes used for creating frames for pre-configured charts. ApplicationFrameThis is a base class for creating the main frame for simple applications. The frame listens for window closing events, and responds by shutting down the JVM. This is fine for small demo applications. For enterprise applications, you need to use something more robust. The main core methods in this class are taken from Component, Container, Window, Frame, and Jframe classes.Class ConstructorThis class helps to create AWT Frames. This is the reason for why we use this class as super class in this tutorial examples.The methods, which are taken form the parent classes are used for opening a frame, closinga frame, changing the size, changing the background or foreground color, and listeners.28RefineryUtilitiesThis is a class collection of utility methods relating to user interface.Class MethodThe above method is used in the tutorial example. Refer JFreeChart API for remaining methods and fields.29JFreeChartEnd of ebook previewIf you liked what you saw…Buy it from our store @ https://30。

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中类库结构可能不一样,有时候可能需要查源码。

JFreeChart教程

JFreeChart教程

分享java带来的快乐我喜欢java新东西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 ”, newDouble(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, // dataset true, // 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、输出略导航BlogJava首页新随笔联系聚合三、柱状图柱状图的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, // dataset PlotOrientation.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); //可见web 技巧(31) (rss)实用工具(15) (rss)文章档案2011年7月(1)2011年6月 (3)2011年5月 (9)2011年4月 (5)2011年3月 (7)2011年2月 (6)2011年1月 (2)2010年12月 (1)2010年9月 (4)2010年8月 (6)2010年7月 (5)2010年6月 (1)2010年3月 (1)2010年2月 (1)2010年1月 (4)2009年12月 (1)2009年11月 (8)2009年10月 (2)2009年9月 (6)2009年8月 (6)2009年6月 (1)2009年4月 (2)2009年3月 (2)2009年2月 (3)2009年1月 (5)2008年12月 (6)2008年10月 (2)2008年9月 (1)2008年7月 (1)2008年6月 (1)2008年5月 (1)2008年4月 (2)2008年1月 (2)2007年12月 (2)2007年11月 (1)2007年10月 (3)2007年8月 (3)2007年7月 (4)2007年6月 (6)2007年5月 (3)2007年4月 (2)2007年3月 (4)2007年2月 (3)2006年12月 (1)2006年11月 (3)2006年10月 (1)2006年9月 (6)2006年8月 (5)2006年6月 (4)2006年5月 (1)2006年4月 (2)2006年3月 (3)2005年8月 (3)相册my daughter my photo收藏夹flex(1) (rss)搜索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(CategoryLabelPositions.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(CategoryDataset categorydataset){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.createIntegerTickUn its());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.createIntegerTickUn its());return jfreechart;}一些重要的方法:XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一个XYSeries数据点间连线不可见xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二个XYSeries数据点不可见xyplot.setRenderer(xylineandshaperenderer);五、时间序列图时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。

jfreechart常用设置方法

jfreechart常用设置方法

jfreechart常用设置方法关键字: jfreechart api 设置公共JFreeChart类:JFreeChart chart;void setAntiAlias(boolean flag) 字体模糊边界void setBackgroundImage(Image image) 背景图片void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundImageAlpha(float alpha) 背景图片透明度(0.0~1.0)void setBackgroundPaint(Paint paint) 背景色void setBorderPaint(Paint paint) 边界线条颜色void setBorderStroke(Stroke stroke) 边界线条笔触void setBorderVisible(boolean visible) 边界线条是否可见chart.getRenderingHints().put(RenderingHints.KEY_TEXT_A NTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); 设置字体TextTitle类:void setFont(Font font) 标题字体void setPaint(Paint paint) 标题字体颜色void setText(String text) 标题内容StandardLegend(Legend)类:void setBackgroundPaint(Paint paint) 图示背景色void setTitle(String title) 图示标题内容void setTitleFont(Font font) 图示标题字体void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角void setOutlinePaint(Paint paint) 图示边界线条颜色void setOutlineStroke(Stroke stroke) 图示边界线条笔触void setDisplaySeriesLines(boolean flag) 图示项是否显示横线(折线图有效)void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状(折线图有效)void setItemFont(Font font) 图示项字体void setItemPaint(Paint paint) 图示项字体颜色void setAnchor(int anchor) 图示在图表中的显示位置(参数常量在Legend类中定义)Axis类:void setVisible(boolean flag) 坐标轴是否可见void setAxisLinePaint(Paint paint) 坐标轴线条颜色(3D轴无效)void setAxisLineStroke(Stroke stroke) 坐标轴线条笔触(3D轴无效)void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)void setLabel(String label) 坐标轴标题void setLabelFont(Font font) 坐标轴标题字体void setLabelPaint(Paint paint) 坐标轴标题颜色void setLabelAngle(double angle)` 坐标轴标题旋转角度(纵坐标可以旋转)void setTickLabelFont(Font font) 坐标轴标尺值字体void setTickLabelPaint(Paint paint) 坐标轴标尺值颜色void setTickLabelsVisible(boolean flag) 坐标轴标尺值是否显void setTickMarkPaint(Paint paint) 坐标轴标尺颜色void setTickMarkStroke(Stroke stroke) 坐标轴标尺笔触void setTickMarksVisible(boolean flag) 坐标轴标尺是否显示ValueAxis(Axis)类:void setAutoRange(boolean auto) 自动设置数据轴数据范围void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定(默认为true)void setFixedAutoRange(double length) 数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)void setInverted(boolean flag) 数据轴是否反向(默认为false)void setLowerMargin(double margin) 数据轴下(左)边距void setUpperMargin(double margin) 数据轴上(右)边距void setLowerBound(double min) 数据轴上的显示最小值void setUpperBound(double max) 数据轴上的显示最大值void setPositiveArrowVisible(boolean visible) 是否显示正向箭头(3D轴无效)void setNegativeArrowVisible(boolean visible) 是否显示反向箭头(3D轴无效)void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)NumberAxis(ValueAxis)类:void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式void setTickUnit(NumberTickUnit unit) 数据轴的数据标签(需要将AutoTickUnitSelection设false)DateAxis(ValueAxis)类:(时间坐标轴)void setMaximumDate(Date maximumDate) 日期轴上的最小日期void setMinimumDate(Date minimumDate) 日期轴上的最大日期void setRange(Date lower,Date upper) 日期轴范围void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式void setTickUnit(DateTickUnit unit) 日期轴的日期标签(需要将AutoTickUnitSelection设false)void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition 类中定义)CategoryAxis(Axis)类:void setCategoryMargin(double margin) 分类轴边距void setLowerMargin(double margin) 分类轴下(左)边距void setUpperMargin(double margin) 分类轴上(右)边距void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度Plot类:(饼图)void setBackgroundImage(Image image) 数据区的背景图片void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)void setBackgroundPaint(Paint paint) 数据区的背景图片背景色void setBackgroundAlpha(float alpha) 数据区的背景透明度(0.0~1.0)void setForegroundAlpha(float alpha) 数据区的前景透明度(0.0~1.0)void setDataAreaRatio(double ratio) 数据区占整个图表区的百分比void setOutLinePaint(Paint paint) 数据区的边界线条颜色void setOutLineStroke(Stroke stroke) 数据区的边界线条笔触void setNoDataMessage(String message) 没有数据时显示的消息void setNoDataMessageFont(Font font) 没有数据时显示的消息字体void setNoDataMessagePaint(Paint paint) 没有数据时显示的消息颜色CategoryPlot(Plot)类:void setDataset(CategoryDataset dataset) 数据区的2维数据表void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式void setAxisOffset(Spacer offset) 坐标轴到数据区的间距void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)void setDomainAxis(CategoryAxis axis) 数据区的分类轴void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触void setRangeAxis(ValueAxis axis) 数据区的数据轴void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见void setRangeGridlinePaint(Paint paint) 数据轴网格线条颜色void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域PiePlot(Plot)类:void setDataset(PieDataset dataset) 数据区的1维数据表void setIgnoreNullValues(boolean flag) 忽略无值的分类void setCircular(boolean flag) 饼图是否一定是正圆void setStartAngle(double angle) 饼图的初始角度void setDirection(Rotation direction) 饼图的旋转方向void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D 饼图无效void setLabelBackgroundPaint(Paint paint) 分类标签的底色void setLabelFont(Font font) 分类标签的字体void setLabelPaint(Paint paint) 分类标签的字体颜色void setLabelLinkMargin(double margin) 分类标签与图的连接线边距void setLabelLinkPaint(Paint paint) 分类标签与图的连接线颜色void setLabelLinkStroke(Stroke stroke) 分类标签与图的连接线笔触void setLabelOutlinePaint(Paint paint) 分类标签边框颜色void setLabelOutlineStroke(Paint paint) 分类标签边框笔触void setLabelShadowPaint(Paint paint) 分类标签阴影颜色void setMaximumLabelWidth(double width) 分类标签的最大长度(0.0~1.0)void setPieIndex(int index) 饼图的索引(复合饼图中用到)void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触void setSectionPaint(int section,Paint paint) 指定分类饼的颜色void setShadowPaint(Paint paint) 饼图的阴影颜色void setShadowXOffset(double offset) 饼图的阴影相对图的水平偏移void setShadowYOffset(double offset) 饼图的阴影相对图的垂直偏移void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null则整个标签包括连接线都不显示void setToolTipGenerator(PieT oolTipGenerator generator) MAP中鼠标移上的显示格式void setURLGenerator(PieURLGenerator generator) MAP中钻取链接格式PiePlot3D(PiePlot)类:void setDepthFactor(double factor) 3D饼图的Z轴高度(0.0~1.0)MultiplePiePlot(Plot)类:void setLimit(double limit) 每个饼图之间的数据关联(详细比较复杂)void setPieChart(JFreeChart pieChart) 每个饼图的显示方式(见JFreeChart类个PiePlot类)AbstractRenderer类:void setItemLabelAnchorOffset(double offset) 数据标签的与数据点的偏移void setItemLabelsVisible(boolean visible) 数据标签是否可见void setItemLabelFont(Font font) 数据标签的字体void setItemLabelPaint(Paint paint) 数据标签的字体颜色void setItemLabelPosition(ItemLabelPosition position) 数据标签位置void setPositiveItemLabelPosition(ItemLabelPosition position) 正数标签位置void setNegativeItemLabelPosition(ItemLabelPosition position) 负数标签位置void setOutLinePaint(Paint paint) 图形边框的线条颜色void setOutLineStroke(Stroke stroke) 图形边框的线条笔触void setPaint(Paint paint) 所有分类图形的颜色void setShape(Shape shape) 所有分类图形的形状(如折线图的点)void setStroke(Stroke stroke) 所有分类图形的笔触(如折线图的线)void setSeriesItemLabelsVisible(int series,boolean visible) 指定分类的数据标签是否可见void setSeriesItemLabelFont(int series,Font font) 指定分类的数据标签的字体void setSeriesItemLabelPaint(int series,Paint paint) 指定分类的数据标签的字体颜色void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置void setSeriesOutLinePaint(int series,Paint paint) 指定分类的图形边框的线条颜色void setSeriesOutLineStroke(int series,Stroke stroke) 指定分类的图形边框的线条笔触void setSeriesPaint(int series,Paint paint) 指定分类图形的颜色void setSeriesShape(int series,Shape shape) 指定分类图形的形状(如折线图的点)void setSeriesStroke(int series,Stroke stroke) 指定分类图形的笔触(如折线图的线)AbstractCategoryItemRenderer(AbstractRenderer)类:void setLabelGenerator(CategoryLabelGenerator generator) 数据标签的格式void setToolTipGenerator(CategoryToolTipGenerator generator) MAP中鼠标移上的显示格式void setItemURLGenerator(CategoryURLGenerator generator) MAP中钻取链接格式void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式void setSeriesToolTipGenerator(int series,CategoryT oolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式BarRenderer(AbstractCategoryItemRenderer)类:void setDrawBarOutline(boolean draw) 是否画图形边框void setItemMargin(double percent) 每个BAR之间的间隔void setMaxBarWidth(double percent) 每个BAR的最大宽度void setMinimumBarLength(double min) 最短的BAR长度,避免数值太小而显示不出void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置voidsetNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置BarRenderer3D(BarRenderer)类:void setWallPaint(Paint paint) 3D坐标轴的墙体颜色StackedBarRenderer(BarRenderer)类:没有特殊的设置StackedBarRenderer3D(BarRenderer3D)类:没有特殊的设置GroupedStackedBarRenderer(StackedBarRenderer)类:void setSeriesToGroupMap(KeyToGroupMap map) 将分类自由的映射成若干个组(KeyToGroupMap.mapKeyT oGroup(series,group))LayeredBarRenderer(BarRenderer)类:void setSeriesBarWidth(int series,double width) 设定每个分类的宽度(注意设置不要使某分类被覆盖)WaterfallBarRenderer(BarRenderer)类:void setFirstBarPaint(Paint paint) 第一个柱图的颜色void setLastBarPaint(Paint paint) 最后一个柱图的颜色void setPositiveBarPaint(Paint paint) 正值柱图的颜色void setNegativeBarPaint(Paint paint) 负值柱图的颜色IntervalBarRenderer(BarRenderer)类:需要传IntervalCategoryDataset作为数据源GanttBarRenderer(IntervalBarRenderer)类:void setCompletePaint(Paint paint) 完成进度颜色void setIncompletePaint(Paint paint) 未完成进度颜色void setStartPercent(double percent) 设置进度条在整条中的起始位置(0.0~1.0)void setEndPercent(double percent) 设置进度条在整条中的结束位置(0.0~1.0)StatisticBarRenderer(BarRenderer)类:需要传StatisticCategoryDataset作为数据源LineAndShapeRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean draw) 是否折线的数据点之间用线连void setDrawShapes(boolean draw) 是否折线的数据点根据分类使用不同的形状void setShapesFilled(boolean filled) 所有分类是否填充数据点图形void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框LevelRenderer(AbstractCategoryItemRenderer)类:void setItemMargin(double percent) 每个分类之间的间隔void setMaxItemWidth(double percent) 每个分类的最大宽度CategoryStepRenderer(AbstractCategoryItemRenderer)类:void setStagger(boolean shouldStagger) 不同分类的图是否交错MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类:void setDrawLines(boolean drawLines) 是否在每个分类线间画连接线void setGroupPaint(Paint groupPaint) 一组图形连接线的颜色void setGroupStroke(Stroke groupStroke) 一组图形连接线的笔触void setMaxIcon(Icon maxIcon) 最大值的ICONvoid setMinIcon(Icon minIcon) 最小值的ICONvoid setObjectIcon(Icon objectIcon) 所有值的ICONAreaRender(AbstractCategoryItemRenderer)类:没有特殊的设置StackedAreaRender(AreaRender)类:没有特殊的设置。

jFreeChart学习笔记

jFreeChart学习笔记

jFreeChart学习笔记一 JFreeChart生成饼状图实现的思路1、初始化图表数据2、获得图表数据集DefaultPieDataset3、利用chart工厂创建一个jfreechart实例JFreeChart chart = ChartFactory.createPieChart3D(title, // 图表标题dataset, // 图表数据集true, // 是否显示图例false, // 是否生成工具(提示)false // 是否生成URL链接);4、通过T extTitle类设置饼图的标题与字体: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)饼图的初始角度源代码import java.awt.Color;import java.awt.Font;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;importbels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.general.DefaultPieDataset;public class CreatePieChart {/*** 获得数据集。

jFreeChart图形显示设置(柱状图)

jFreeChart图形显示设置(柱状图)
3.5f,//设置柱的Outline颜色
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教程与实例

以图形报表的形式对数据进行统计分析,其显示结果非常直观、清晰,查看者能够一目了然。

然而图表的制作非常繁琐,而且当数据发生变化时,需要对其进行重新绘制。

在Java语言中,JFreeChart组件为图形报表技术提供了解决方案。

JFreeChart组件用于绘制动态图表,其强大的功能、出色的制图效果及便捷的操作方法在Java领域中已得到一致的认可。

本章将向读者介绍JFreeChart组件的使用方法及常见动态图表案例。

通过阅读本章,您可以:了解动态图表掌握JFreeChart组件的制图方法掌握制图对象理解数据集合掌握常用绘图区对象类型及关系掌握坐标轴对象类型及关系掌握图片渲染对象了解JFreeChart组件的内置JDBC1 JFreeChart简介JFreeChart是Java中开源的制图组件,主要用于生成各种动态图表。

在Java的图形报表技术中,JFreeChart组件提供了方便、快捷、灵活的制图方法。

1.1 认识JFreeChart组件作为一个功能强大的图形报表组件,JFreeChart为Java的图形报表技术提供了解决方案。

在Java项目的应用中,JFreeChart组件几乎可以满足目前图形报表的所有需求。

JFreeChart组件可以生成各种各样的图形报表,如常用的柱形图、区域图、饼形图、折线图、时序图、甘特图等;而对于同一种类型的图表,JFreeChart组件还提供了不同的表现方式。

这些效果可以在下载JFreeChart组件后,通过运行JFreeChart提供的例子程序jfreechart-1.0.13-demo.ja进行查看,其运行后的效果如图24.1所示。

1.2 JFreeChart的下载与使用JFreeChart是开放源代码的图形报表组件(开源站点上的一个Jave项目),其主页为/jfreechart/index.html,如图24.2所示。

在主页中单击DOWNLOAD导航链接将进入下载页面,选择所要下载的JfreeChart版本即可进行下载,在本书编写时其最新版本为1.0.13,本章将以此版本为例进行讲解。

Java报表之JFreeChart-第3讲

Java报表之JFreeChart-第3讲

Java报表之JFreeChart-第3讲1.DefaultPieDataset,PiePlot,PiePlot3D 引入[java]view plain copy1.package com.xp.chart.pie;2.3.import java.awt.Color;4.import java.awt.Font;5.import java.io.IOException;6.import java.text.NumberFormat;7.8.import javax.servlet.http.HttpSession;9.10.import org.jfree.chart.ChartFactory;11.import org.jfree.chart.JFreeChart;12.import bels.StandardPieSectionLabelGenerator;13.import org.jfree.chart.plot.PiePlot;14.import org.jfree.chart.servlet.ServletUtilities;15.import org.jfree.chart.title.TextTitle;16.import org.jfree.data.general.DefaultPieDataset;17.18.public class PieChart1 {19.public static String getPieChart(HttpSession session) throws IOException{20.// 创建一个默认的饼状图实例21. DefaultPieDataset dataset = new DefaultPieDataset();22.// 往饼状图添加数据23. dataset.setValue("java", 18238);24. dataset.setValue("C", 10295);25. dataset.setValue("C++", 6657);26. dataset.setValue("C#", 5493);27. dataset.setValue("Python", 4302);28. dataset.setValue("JavaScript", 2929);29.30.// 创建一个jfeechart图表31. JFreeChart chart = ChartFactory.createPieChart("编程语言排行", dataset, true,32.true, true);33.// 副标题34. chart.addSubtitle(new TextTitle("2016年度"));35.//通过图表实例化一个饼图对象36. PiePlot pieplot = (PiePlot) chart.getPlot();37. pieplot.setLabelFont(new Font("宋体", 0, 11));//设置图表中饼图的字体为11px38.// 设置饼图是圆的(true),还是椭圆的(false);默认为true39. pieplot.setCircular(true);40.// 没有数据的时候显示的内容41. pieplot.setNoDataMessage("无数据显示");42.//设置边框的颜色43. pieplot.setBaseSectionOutlinePaint(Color.green);44. StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator(45."{0}:({1}.{2})", NumberFormat.getNumberInstance(),46. NumberFormat.getPercentInstance());47. pieplot.setLabelGenerator(standarPieIG);48.49. String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500,50.null, session);51.return fileName;52. }53.}创建一个pieChart1.jsp如下[html]view plain copy1.<%@page import="com.xp.chart.pie.PieChart1"%>2.<%@ page language="java"contentType="text/html; charset=utf-8"3.pageEncoding="utf-8"%>4.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w/TR/html4/loose.dtd">5.<html>6.<head>7.<meta http-equiv="Content-Type"content="text/html; charset=utf-8">8.<title>Insert title here</title>9.</head>10.<body>11.<%12. String fileName=PieChart1.getPieChart(session);13. System.out.println(fileName);14.%>15.<img src="DisplayChart?filename=<%=fileName %>"width="700"height="500"border="0"/>16.</body>17.</html>显示效果如图2.利用JFreeChart创建普通饼状图报表,并且突出一个[java]view plain copy1.package com.xp.chart.pie;2.3.import java.awt.Font;4.import java.text.NumberFormat;5.6.import javax.servlet.http.HttpSession;7.8.import org.jfree.chart.ChartFactory;9.import org.jfree.chart.JFreeChart;10.import bels.StandardPieSectionLabelGenerator;11.import org.jfree.chart.plot.PiePlot;12.import org.jfree.chart.servlet.ServletUtilities;13.import org.jfree.chart.title.TextTitle;14.import org.jfree.data.general.DefaultPieDataset;15.16.public class PieChart2 {17.18.public static String getPieChart(HttpSession session) throws Exception {19. DefaultPieDataset dataset = new DefaultPieDataset();20. dataset.setValue("申通快递", 8.24);21. dataset.setValue("EMS", 12.42);22. dataset.setValue("中通快递", 25.99);23. dataset.setValue("圆通快递", 53.35);24. dataset.setValue("其他", 11.1);25.26. JFreeChart chart=ChartFactory.createPieChart("各种快递数据饼状图表", dataset, true, true, true);27.28.// 副标题29. chart.addSubtitle(new TextTitle("2016年度"));30.31. PiePlot pieplot=(PiePlot)chart.getPlot();32. pieplot.setLabelFont(new Font("宋体",0,11));33.// 设置饼图是圆的(true),还是椭圆的(false);默认为true34. pieplot.setCircular(true);35.// 没有数据的时候显示的内容36. pieplot.setNoDataMessage("无数据显示");37. StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:({1}.{2})", NumberFormat.getNumberInstance(), NumberFo rmat.getPercentInstance());38. pieplot.setLabelGenerator(standarPieIG);39. pieplot.setExplodePercent("快递",0.23);40.41. String fileName=ServletUtilities.saveChartAsPNG(chart, 700, 500, null, session);42.43.return fileName;44. }45.}显示效果如图3.利用JFreeChart创建3D饼状图报表[java]view plain copy1.package com.xp.chart.pie;2.3.import java.awt.Font;4.import java.text.NumberFormat;5.6.import javax.servlet.http.HttpSession;7.8.import org.jfree.chart.ChartFactory;9.import org.jfree.chart.JFreeChart;10.import bels.StandardPieSectionLabelGenerator;11.import org.jfree.chart.plot.PiePlot;12.import org.jfree.chart.plot.PiePlot3D;13.import org.jfree.chart.servlet.ServletUtilities;14.import org.jfree.chart.title.TextTitle;15.import org.jfree.data.general.DefaultPieDataset;16.import org.jfree.util.Rotation;17.18.public class PieChart3 {19.20.public static String getPieChart(HttpSession session) throws Exception {21. DefaultPieDataset dataset = new DefaultPieDataset();22. dataset.setValue("生活费用", 25);23. dataset.setValue("水电气费", 23);24. dataset.setValue("城管强拆", 25);25. dataset.setValue("医疗事故", 24);26. dataset.setValue("其他", 3);27.28. JFreeChart chart = ChartFactory.createPieChart3D("支出类型结构比例图", dataset,29.true, true, true);30. PiePlot pieplot = (PiePlot) chart.getPlot();31. pieplot.setLabelFont(new Font("宋体", 0, 11));32.// 设置饼图是圆的(true),还是椭圆的(false);默认为true33. pieplot.setCircular(true);34.// 没有数据的时候显示的内容35. pieplot.setNoDataMessage("无数据显示");36. StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator(37."{0}:({1}.{2})", NumberFormat.getNumberInstance(),38. NumberFormat.getPercentInstance());39. pieplot.setLabelGenerator(standarPieIG);40.// 副标题41. chart.addSubtitle(new TextTitle("2016年度"));42.43. PiePlot3D pieplot3d = (PiePlot3D) chart.getPlot();44.45.// 设置开始角度46. pieplot3d.setStartAngle(120D);47.// 设置方向为”顺时针方向“48. pieplot3d.setDirection(Rotation.CLOCKWISE);49.// 设置透明度,0.5F为半透明,1为不透明,0为全透明50. pieplot3d.setForegroundAlpha(0.7F);51.52. String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 500,53.null, session);54.55.return fileName;56. }57.}显示效果如图。

JFreeChart使用方法

JFreeChart使用方法

JFreeChart使用方法概述1.JFreeChart Itext StrutsJFreeChartJFreeChart(/) 主要是用来制作各种各样的图表,包括:饼图、柱状图( 普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

本文中使用的是jfreechart-1.0.13.jar。

iTextiText(/) 是一个能够快速产生PDF 文件的Java 类库,与Servlet 有很好的给合,可以非常方便完成PDF 输出,最新的版本是iText-5.0.4.jar。

如果需要在报表中支持中文显示,还需要下载iTextAsian.jar。

2.JFreeChart配置3.JFreeChart相关资料JFreeChart使用基础/view/0ff1f8e8e009581b6bd9ebbc.html?from=rec&pos=2&weight=2&lastweight=0&count=2JFreeChart乱码修改http://www.zihou.me/html/2009/12/17/708.htmlJFreeChart与Itext 生成PDF图片/articles/42891.shtmlJFreeChart使用框架创建数据集柱状图数据集的获取DefaultCategoryDataset类例子:CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, // String[]{柱子的名称} 位于说明框columnKeys, // String[]{柱子组名称} 位于X轴data) // Double型2维数组折线图的数据集的获取DefaultCategoryDataset类例子:CategoryDataset dataset =DatasetUtilities.createCategoryDataset(rowKeys, // String[]{每一条线的名称} 位于说明框columnKeys, // String[]{每一个节点名称} 位于X轴data) // Double型2维数组,饼图的数据集的获取DefaultPieDataset类例子:DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue(“分饼的名称”, “分饼的数据”);创建JFreeChart对象通过制图工厂ChartFactroy创建JFreeChart对象://创建一个常规的柱形图对象Public static JFreeChart createBarChart()例子:JFreeChart chart = new ChartFactroy. createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)true, // 是否生成工具true// 是否生成URL链接)//创建一个常规的饼形图对象Public static JFreeChart createPieChart()例子:JFreeChart chart = ChartFactory.createPieChart(chartTitle, // chart titledataset,// datatrue,// include legendtrue,false)//创建一个常规的折线图对象Public static JFreeChart createLineChart()例子:JFreeChart chart = ChartFactory.createLineChart(chartTitle, // 图表标题xName, // X轴的显示标签yName, // Y轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)true, // 是否生成工具true) // 是否生成URL链接获取图片:1.在F:\工具\Tomcat\Tomcat6.0\webapps\gms\web\report\images\temp 目录下生成图片:生成JFreeChart组件所绘制的图片:调用ChartUtilities类的saveChartAsPNG()方法声称.png格式的图片Public static String saveChartAsPNG(84437JFreeChart chart, //JFreeChart对象Int width, //生成图片的宽度Int height, //生成图片的高度HttpSession sseion) // HttpSession对象显示图片:在JSP中使用图片:例子:<%String filename = ChartUtilities. saveChartAsPNG(Chart,500,700,Session)String graphURL = request.getContextPath()+“/Servlet/DisplayChart?filename=”+filename;%><img src="<% = graphURL %>">2.采用输出流方式获取图片,不会产生垃圾文件生成JFreeChart组件所绘制的图片:调用ChartUtilities类的 writeChartAsPNG()方法可以将图片直接输出到页面并运用到servlet或Struts2的Action中,不用存储到硬盘例子:ChartUtilities.writeChartAsPNG(response.getOutputStream(), //选择servlet方式输出图片chart, //生成的JFreeChart的对象700, //生成图片的宽度500) //生成图片的高度显示图片:在JSP上把图片的src请求路径设置为产生输出流的action即可例子:<img src="/JfreeChart.action"> JFreeChart 调整:柱状图调整:1.整体的调整获取plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 数据轴数据标签的显示格式DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df);2.X轴调整获取X轴CategoryAxis domainAxis = plot.getDomainAxis();// X轴标题字体设置domainAxis.setLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12));//X轴数值字体设置domainAxis.setTickLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12));//设置X轴文字倾斜度domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 3.0));// X轴上的Lable 是否完整显示domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 设置距离图片左端距离domainAxis.setLowerMargin(0.1);// 设置距离图片右端距离domainAxis.setUpperMargin(0.1);调整完成后要将X轴set 到plot 中plot.setDomainAxis(domainAxis);3.Y轴调整获取Y轴ValueAxis rangeAxis = plot.getRangeAxis();// Y轴标题字体设置rangeAxis.setLabelFont(labelFont);//Y轴数值字体设置rangeAxis.setTickLabelFont(labelFont);// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);调整完成后要将Y轴set 到plot 中plot.setRangeAxis(rangeAxis);4.背景调整// 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)plot.setBackgroundPaint(new Color(255, 255, 204))// 设置柱子宽度renderer.setMaximumBarWidth(0.05);// 设置柱子高度renderer.setMinimumBarLength(0.2);// 设置柱子边框颜色renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱子边框可见renderer.setDrawBarOutline(true);// // 设置柱的颜色renderer.setSeriesPaint(0, new Color(204, 255, 255));renderer.setSeriesPaint(1, new Color(153, 204, 255));renderer.setSeriesPaint(2, new Color(51, 204, 204));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.0);// 显示每个柱的数值,并修改该数值的字体属性renderer.setIncludeBaseInRange(true);renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(1.0f);//设置图片背景色chart.setBackgroundPaint(Color.white);5.注意问题:1.在调整柱形图的过程中在设置柱子颜色的时候,设置的数量不得大于柱子量2.数据中说明文字的数据个数要等于设置的分组数量3.数据中列的数量要等于X轴列的数量饼图的调整// 使下说明标签字体清晰,去锯齿chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);// 图片背景色chart.setBackgroundPaint(Color.white)// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);// 指定饼图轮廓线的颜色plot.setBaseSectionOutlinePaint(Color.BLACK);plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。

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中类库结构可能不一样,有时候可能需要查源码。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JFreeChart 是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。

它能够用在Swing和Web等 中制作自定义的图表或报表,并且得到广泛的应用。

本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用 JFreeChart的目的。

一.下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。

其下载地址为:/project/showfiles.php?group_id=15494,当前最新版本为1.0.13。

笔者下载的是1.0.13最新版。

说明:1)source目录:为jfreechart的源码目录;2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.13.jar、gnujaxp.jar和jcommon-1.0.16.jar这三个包; 3)根目录下的jfreechart-1.0.13-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。

2. 环境配置笔者的开发环境如下:JDK:1.6MyEclipse:6.6Tomcat:6.0.18为 了后续的“用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-class></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/DisplayChart</url-pattern></servlet-mapping>二. 柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。

首先在该目录下建立一个sample1.jsp文件,让我们来看一个简单的柱状图的例子,修改后的sample1.jsp的内容如下所示:<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.DefaultCategoryDataset"%><%DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(610, "Guangzhou", "Pig");dataset.addValue(220, "Guangzhou", "Beef");dataset.addValue(530, "Guangzhou", "Chicken");dataset.addValue(340, "Guangzhou", "Fish");JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图","type","amount",dataset,PlotOrientation.VERTICAL,false,false,false);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 %>">在浏览器中输入地址:http://localhost:8080/jfreechart/bar/sample1.jsp,可看到如下柱状图:上面的这个柱状图比较简单,稍显单调,在有些情况下,我们需要用不同颜色来表示不同的种类,或者在 种类上标上具体数值,亦或需要加上3D水晶效果。

下面让我们来做更深一步的探讨。

接下来让我们看一个用不同颜色来表示不通种类的例子。

在WebRoot的 bar目录下新建sample2.jsp页面,将其代码修改如下:<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities"%><%double[][] data = new double[][] {{1310}, {720}, {1130}, {440}};String[] rowKeys = { "pig", "beef", "chicken", "fish" };String[] columnKeys = {""};CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);JFreeChart chart = ChartFactory.createBarChart3D("广州肉类销量统计图","type","amount",dataset,PlotOrientation.VERTICAL,true,false,false);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 %>">该页面的运行效果如下图所示:对比该例与前例,可看出createBarChart3D的倒数第三个参数修改成了true,该参 数可用来显示下方的方框 。

上两例我们显示的只是一个城市的肉类销量,有时候我们有对比显示多个城市的不同肉类,只要将上例稍作修改即可。

例如要在图中表示广州、深圳、东莞、佛山 四个城市的四个肉类的销售情况,只需要将如下三句稍做修改:double[][] data =newdouble[][] {{1310}, {720}, {1130}, {440}};String[] rowKeys = {"pig", "beef","chicken", "fish"};String[] columnKeys = {""};例如修改成:double[][] data =newdouble[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};String[] rowKeys = {"pig", "beef","chicken", "fish"};String[] columnKeys = {"Guangzhou", "Shenzhen", "Dongguan", "Foshan"};在运行该jsp页面,可看到如下界面:在上述几例中,在某个柱子上都没有显示相应的数值,下面让我们为每个柱子都加上它的数值,我们新建一个sample4.jsp页面,其内容如下:<%@ page contentType="text/html;charset=GBK"%><%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeChart,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.ServletUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.general.DatasetUtilities,org.jfree.chart.plot.*,bels.*,org.jfree.chart.renderer.category.BarRenderer3D,java.awt.*,org.jfree.ui.*,org.jfree.chart.axis.AxisLocation"%><%double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};String[] rowKeys = { "pig", "beef", "chicken", "fish" };String[] columnKeys = { "Guangzhou", "Shenzhen", "Dongguan", "Foshan" };CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); JFreeChart chart = ChartFactory.createBarChart3D("肉类销量统计图","type","amount",dataset,PlotOrientation.VERTICAL,true,true,false);CategoryPlot plot = chart.getCategoryPlot();//设置网格背景颜色plot.setBackgroundPaint(Color.white);//设置网格竖线颜色plot.setDomainGridlinePaint(Color.pink);//设置网格横线颜色plot.setRangeGridlinePaint(Color.pink);//显示每个柱的数值,并修改该数值的字体属性BarRenderer3D renderer = new BarRenderer3D();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);//默认的数字显示在柱子中,通过如下两句可调整数字的显示//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));renderer.setItemLabelAnchorOffset(10D);//设置每个地区所包含的平行柱的之间距离//renderer.setItemMargin(0.3);plot.setRenderer(renderer);//设置地区、销量的显示位置//将下方的“肉类”放到上方plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);//将默认放在左边的“销量”放到右方plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session);String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %><img src="<%= graphURL %>" width=700 height=400 border=0 usemap="#<%= filename %>">运行效果如下所示:注意:jfreechart的很多版本不兼容,请大家在运行此例时确认下载了对应的版本。

相关文档
最新文档