`
flashdream8
  • 浏览: 680750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JFreeChart入门与实践

阅读更多

    JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,如饼图、柱状图、线图等.

官方网站:http://www.jfree.org/jfreechart/index.html

所需开发包:jfreechart-1.0.9.jar、jcommon-1.0.12.jar、(gnujaxp.jar可不需要)

 

核心类及接口说明:

 

JfreeChart:整个图表的定制,可通过工厂类ChartFactory获得具体的JfreeChart

A chart class implemented using the Java 2D APIs. The current version supports bar charts, line charts, pie charts and xy plots (including time series data).

JFreeChart coordinates several objects to achieve its aim of being able to draw a chart on a Java 2D graphics device: a list of Title objects (which often includes the chart's legend), a Plot and a Dataset (the plot in turn manages a domain axis and a range axis).

DataSet:图表所需要的数据集合

The base interface for data sets.

All datasets are required to support the DatasetChangeEvent mechanism by allowing listeners to register and receive notification of any changes to the dataset.

In addition, all datasets must belong to one (and only one) DatasetGroup. The group object maintains a reader-writer lock which provides synchronised access to the datasets in multi-threaded code.

Plot:根据不同数据指定不同的区域,主要用于显示数据的区域范围

The base class for all plots in JFreeChart. The JFreeChart class delegates the drawing of axes and data to the plot. This base class provides facilities common to most plot types.

Axis:坐标轴

The base class for all axes in JFreeChart. Subclasses are divided into those that display values (ValueAxis) and those that display categories (CategoryAxis).

AbstractRenderer:绘制功能

Base class providing common services for renderers. Most methods that update attributes of the renderer will fire a RendererChangeEvent, which normally means the plot that owns the renderer will receive notification that the renderer has been changed (the plot will, in turn, notify the chart) 

 

实例制作(可以分离的2D饼图,具有提示跟超联接功能的3D饼图,柱状图的制作):

 

饼图制作(2D饼图,3D饼图的制作)

 

1.web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app> 
 
  <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>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

2.index.jsp

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.labels.StandardPieToolTipGenerator"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="java.io.*"%>
<%@ page import="org.jfree.util.Rotation" %>
<%@ page import="org.jfree.chart.labels.StandardPieSectionLabelGenerator" %>
<%@ page import="java.text.NumberFormat" %>
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<META NAME="Author" CONTENT="Alpha">
<TITLE>软件行业资格分配数据图</TITLE>
</HEAD>
<BODY>
<%//去掉[1]~[7]的注释,恢复@部分注释就由2D饼图变为3D饼图
  DefaultPieDataset dataset = new DefaultPieDataset();
  dataset.setValue("软件工程师", 0.40);
  dataset.setValue("高级软件工程师", 0.25);
  dataset.setValue("项目经理", 0.08);
  dataset.setValue("系统分析师", 0.1);
  dataset.setValue("软件架构师", 0.1);
  dataset.setValue("其他", 0.2);
  //@JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, true, true);
  JFreeChart chart = ChartFactory.createPieChart("IT行业职业分布图", dataset, true, true, true);//[1]
  chart.setBackgroundPaint(java.awt.Color.white);
  //@PiePlot3D pieplot = new PiePlot3D(dataset);//生成一个3D饼图
  PiePlot pieplot = (PiePlot) chart.getPlot();//[2]生成一个2D饼图
  pieplot.setLabelFont(new java.awt.Font("宋体", 0, 12));
  //没有数据的时候显示的内容
  pieplot.setNoDataMessage("no data!");
  //A flag indicating whether the pie chart is circular, or stretched into an elliptical shape
  //设置饼图是圆的(true),还是椭圆的(false);默认为true
  pieplot.setCircular(true);
  //Sets the gap between the edge of the pie and the labels
  //(expressed as a percentage of the plot width) and sends a PlotChangeEvent to
  //all registered listeners
  pieplot.setLabelGap(0.5D);
  //设置开始角度
  pieplot.setStartAngle(150D);
  //设置方向为顺时针方向
  pieplot.setDirection(Rotation.CLOCKWISE);
  //设置透明度,0.5F为半透明,1为不透明,0为全透明
  pieplot.setForegroundAlpha(0.5F);
  //扇区分离显示
  //Sets the amount that a pie section should be exploded and
  //sends a PlotChangeEvent to all registered listeners.
  pieplot.setExplodePercent("高级软件工程师", 0.20000000000000001D);
  ////pieplot.setExplodePercent(dataset.getKey(1),0.25d);
  //// void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0)
  ////pieplot.setExplodePercent(1,1.0);
  //{0}选项,{1}数值,{2}百分比
  pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}({2})"));//[3]
  pieplot.setLabelBackgroundPaint(java.awt.Color.white);//[4]
  //pieplot.setLegendLabelToolTipGenerator(new StandardPieSectionLabelGenerator("Tooltip for legend item {0}"));//[5]
  pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance()));
  //Sets the flag that controls whether simple or extended labels are displayed on the plot,
  //and sends a PlotChangeEvent to all registered listeners.
  pieplot.setSimpleLabels(true);//[6]simple
  //Sets the interior gap and sends a PlotChangeEvent to all registered listeners.
  pieplot.setInteriorGap(0.0D);//[7]
  //设置扇区边框不可见  
  pieplot.setSectionOutlinesVisible(false); 
  //StandardPieURLGenerator(java.lang.String prefix, java.lang.String categoryParameterName, java.lang.String indexParameterName);
  pieplot.setURLGenerator(new StandardPieURLGenerator("index.jsp"));//设定图片链接
  //public StandardPieToolTipGenerator(java.lang.String labelFormat)//"{0}: ({1}, {2})"
  //@pieplot.setToolTipGenerator(new StandardPieToolTipGenerator());
  ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
  //String filename = ServletUtilities.saveChartAsJPEG(chart,500,300,info,session);
  //saveChartAsJPEG可能影响显示
  String filename = ServletUtilities.saveChartAsPNG(chart,500,300,info,session);
  ChartUtilities.writeImageMap(response.getWriter(),"map0",info,true); //new PrintWriter(out);
  String graphURL = request.getContextPath()+"/servlet/DisplayChart?filename=" + filename;
%>

<P ALIGN="CENTER">
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0" alt="pic">
</P>
</BODY>
</HTML>


柱状图制作:

 

import java.awt.Color;
import java.io.FileOutputStream;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
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.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarChar {

 private static CategoryDataset createDataset() {
  String s = "First";
  String s1 = "Second";
  String s2 = "Third";
  String s3 = "Category 1";
  String s4 = "Category 2";
  String s5 = "Category 3";
  String s6 = "Category 4";
  String s7 = "Category 5";
  DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
  defaultcategorydataset.addValue(1.0D, s, s3);
  defaultcategorydataset.addValue(4D, s, s4);
  defaultcategorydataset.addValue(3D, s, s5);
  defaultcategorydataset.addValue(5D, s, s6);
  defaultcategorydataset.addValue(5D, s, s7);
  defaultcategorydataset.addValue(5D, s1, s3);
  defaultcategorydataset.addValue(7D, s1, s4);
  defaultcategorydataset.addValue(6D, s1, s5);
  defaultcategorydataset.addValue(8D, s1, s6);
  defaultcategorydataset.addValue(4D, s1, s7);
  defaultcategorydataset.addValue(4D, s2, s3);
  defaultcategorydataset.addValue(3D, s2, s4);
  defaultcategorydataset.addValue(2D, s2, s5);
  defaultcategorydataset.addValue(3D, s2, s6);
  defaultcategorydataset.addValue(6D, s2, s7);
  return defaultcategorydataset;
 }

 private static JFreeChart createChart(CategoryDataset categorydataset) {

 //createBarChart参数说明
  //createBarChart(java.lang.String title, java.lang.String categoryAxisLabel,
  //java.lang.String valueAxisLabel, CategoryDataset dataset,
  //PlotOrientation orientation,boolean legend, boolean tooltips, boolean urls)
  // 图表标题
  // 类型轴的显示标签
  // 数值轴的显示标签
  // 数据集
  // 图表方向:水平、垂直
  // 是否显示图例(类型说明图标)
  // 是否生成工具提示
  // 是否生成URL链接
  JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart",
    "Category", "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.createIntegerTickUnits());
  numberaxis.setUpperMargin(0.14999999999999999D);//设置当前最高柱状图项距离顶部的距离为其自高的百分比
  CategoryItemRenderer categoryitemrenderer = categoryplot.getRenderer();
  categoryitemrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
  categoryitemrenderer.setSeriesItemLabelsVisible(1, Boolean.TRUE);//显示第2类(Category)系列柱形图所对应的Lable
  CategoryAxis categoryaxis = categoryplot.getDomainAxis();
  categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//设置类别轴上的刻度标签显示位置倾斜45度
  return jfreechart;
 }

 public static void main(String args[]) {
  JFreeChart jfreechart = createChart(createDataset());
  ChartFrame pieFrame = new ChartFrame("Bar Chart Frame",jfreechart);
     pieFrame.pack();
     pieFrame.setVisible(true);
//  try {
//   ChartUtilities.writeChartAsJPEG(new FileOutputStream("d:\\barTest.jpg"), jfreechart, 800, 500);
//  } catch (Exception e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
 }
}

<转自:http://blog.sina.com.cn/s/blog_5ccfe6ad0100biax.html>

分享到:
评论

相关推荐

    JFreeChart入门小例子.rar

    这个压缩包“JFreeChart入门小例子.rar”显然是一个初学者导向的教程资源,旨在帮助用户快速掌握如何在Java项目中集成和使用JFreeChart。 在“JFreeChart入门小例子 - 因为专注,所以专业 - BlogJava.htm”中,可能...

    JfreeChart入门带注释

    最后,如果你的应用是 Web 应用,JFreeChart 可以与 Servlet 结合,动态生成图表并返回给客户端。通过 `ChartUtilities.writeChartAsPNG()` 方法将图表写入 Servlet 输出流,然后由浏览器接收。 总的来说,...

    jfreechart(入门教程+案例集萃)

    **JFreeChart 入门教程及案例集萃详解** JFreeChart 是一个强大的 Java 图表库,它提供了丰富的图表类型,如柱状图、饼图、线形...通过学习和实践,我们可以利用JFreeChart有效地呈现复杂的数据,提升应用的用户体验。

    JFreeChart 简单的例子用作入门

    通过深入学习和实践这个例子,你可以掌握 JFreeChart 的基本操作,并进一步了解如何根据实际需求定制图表。JFreeChart 的强大功能在于其丰富的图表类型和高度可定制性,这使得它能应对各种复杂的数据可视化挑战。在...

    jFreeChart入门篇

    **JFreeChart 入门详解** JFreeChart 是一个用于Java平台的开源图表库,它提供了丰富的图表类型,包括柱状图、饼图、线形图、散点图、甘特图等,常用于数据分析、报表生成以及可视化展示。本文将深入浅出地介绍...

    jfreechart官方demo

    **JFreeChart官方Demo详解** JFreeChart是一个强大的Java库,用于生成高质量的图表,包括饼图、柱状图、线图、散点图、甘特...通过实践和探索,你将能够熟练掌握JFreeChart,为你的Java应用程序增添丰富的可视化元素。

    JFreeChart文档、jar包、教程

    3. **数据绑定**:JFreeChart可以通过各种数据结构(如数组、列表、表格)与数据进行绑定,方便地将数据转换为可视化的图表。 4. **动态更新**:JFreeChart支持图表的实时更新,这对于需要显示动态变化数据的应用来...

    jFreeChart

    **jFreeChart** 是一个广泛使用的Java库,用于创建高质量的图表,包括饼图、柱状图、线图、...手册将提供详尽的API参考、实例代码和最佳实践,帮助你充分利用jFreeChart的强大功能,为你的项目创建出专业、美观的图表。

    jfreechart源码

    这些示例代码是理解和使用JFreeChart的快速入门指南,可以帮助你快速掌握基本用法。 此外,JFreeChart还支持导出图表为各种格式,如PNG、JPEG、PDF、SVG等,方便在报告或网页中嵌入。它也与JDBC、CSV等数据源良好...

    JFreeChart Developer Guide 1.0.6(Including Demo source code)

    这些示例代码涵盖了各种图表类型和功能的实现,是学习和理解JFreeChart实际应用的最佳实践。通过查看和运行这些示例,开发者可以直观地了解如何在自己的项目中应用JFreeChart。 在Java项目中,JFreeChart可以帮助...

    JFreeChart开发文档

    此外,还包含了一些示例代码和最佳实践,以帮助开发者更好地理解和使用JFreeChart。 ##### 1.3 致谢 感谢所有为JFreeChart贡献代码、文档或提出建议的人士。特别是David Gilbert,他是JFreeChart的主要作者之一,对...

    使用JFreeChart小结(一)

    在"使用JFreeChart小结(一)"这篇博文中,作者主要分享了入门JFreeChart的基本步骤和一些关键概念。 首先,让我们了解如何添加JFreeChart到项目中。通常,你可以通过Maven或Gradle构建工具将JFreeChart库作为依赖...

    java报表jfreechart开发

    对于初学者而言,文档中的入门指南是一个很好的起点;而对于有经验的开发者,则可以通过API文档深入了解各个类和方法的功能。 ##### 1.3 感谢 JFreeChart的成功离不开社区的支持。项目鼓励贡献者提交错误报告、提出...

    jfreechart-1.0.13报表通过JSP页面来显示

    2. **JFreeChart入门**: JFreeChart提供了丰富的API,用于构建和定制各种类型的图表。首先,我们需要添加JFreeChart的jar文件到项目的类路径中。接着,通过`ChartFactory`类可以方便地创建不同类型的图表,如`...

    JFreeChart 开发指南

    以上知识点总结了《JFreeChart 开发指南》的主要内容,为开发者提供了从入门到进阶所需的全面指导。无论是初学者还是有经验的开发人员,都可以通过这些知识点快速上手,并深入了解JFreeChart的各种特性和高级用法。

    jfreechart使用及其资料

    在实际开发中,JFreeChart常与其他Java库结合使用,例如与Swing或JavaFX构建用户界面,与JDBC处理数据库数据,或者与Servlets和JSP在Web应用中生成图表。这些结合使用的方法也在相关资料中有所涉及。 总的来说,...

    JFreeChart

    在博文链接提供的ITEYE博客中,作者详细介绍了如何使用JFreeChart创建柱状图和饼图,并给出了代码示例,帮助初学者快速入门。此外,JFreeChart还支持其他高级特性,如动态图表、交互式图表以及导出图表为PDF和SVG...

    jfreechart的一个小例子

    在实际开发中,你可能需要将JFreeChart与Swing或其他Java GUI框架结合,或者与其他数据处理库(如Apache POI读取Excel数据)一起使用,以实现更复杂的数据可视化功能。通过这个小例子,你不仅可以学习到JFreeChart的...

    JfreeChart.rar

    **JFreeChart 入门快速指南** JFreeChart 是一个流行的 Java 图形库,它提供了丰富的图表类型,如柱状图、饼图、线图、散点图等,...通过深入学习和实践,你可以利用 JFreeChart 创建出专业且美观的数据可视化应用。

    jFreeChart学习操作的全部资源

    1. **快速入门**:引导开发者如何创建基本图表,包括设置数据、创建图表对象和渲染到组件或文件的步骤。 2. **API参考**:详细介绍了jFreeChart的所有类和方法,是开发者查阅具体功能和实现细节的主要参考资料。 3...

Global site tag (gtag.js) - Google Analytics