TutorialsPoint JFreeChart 教程

来源：易百教程

JFreeChart教程

图表是信息的图形表示。有可用的各种工具，它可用于创建不同类型的图表。

本教程学习什么是JFreeChart？为什么需要它，并在各种方式列出一个基于Java的应用程序或独立创建不同类型的图表。

JFreeChart是什么?

JfreeChart是用Java开发的开源库，它可以在基于Java的应用程序可用于创建各种各样的图表。通过使用JFreeChart，可以创建2D和3D图表，如饼图，条形图，折线图，XY图和3D图表所有常用的主要类型。

为什么要使用JFreeChart?

它是100%开源和免费的，允许使用在商业应用中无需任何费用。

它配备了有据可查的API，这使得它很容易理解。

它支持多种图表类型，如饼图，折线图，条形图，面积图和三维图表。

JFreeChart易于扩展，并且可以在客户端以及服务器端应用程序中被使用。

它支持多种输出格式，如PNG，JPEG，PDF，SVG等。

它允许图表丰富的自定义。

在哪里使用JFreeChart？

考虑有这样一个情况，当正在开发一个应用程序，需要以图表的形式显示数据，其中数据本身是动态填充。在这种情况下，可以使用JFreeChart显示，使用简单的编程图表的形式的数据。

历史

JFreeChart 工程由David Gilbert成立十四年前（2000年2月），而现在JFreeChart是在Java开发的最广泛使用的图表库。

JFreeChart安装 - JFreeChart教程

本章将指导您完成JFreeChart在Windows和Linux的安装设置过程。所需的用户管理，同时安装JFreeChart。JFreeChart是著名的高效图表创建和用户友好的安装设置。

系统要求：

JDK | 1.5 或以上
内存 | 2GB RAM
--- | ---
硬盘空间 | 没有最低要求
--- | ---
操作系统版本 | Linux / Windows
--- | ---

安装JFreeChart

要安装JFreeChart，首先需要在系统上安装Java。

步骤1：验证Java安装

为了验证Java安装，打开控制台并执行下面的Java命令：

操作系统 | 任务 | 命令
Windows | 打开命令控制台 | C:>java -version
Linux | 打开命令终端 | $java -version

如果Java安装得当，那么应该得到两个操作系统下面的输出：

操作系统 | 描述
Windows | Java version "1.7.0_60" Java (TM) SE Run Time Environment (build 1.7.0_60-b19) Java HotSpot(TM) 64-bit Server VM (build 24.60-b09,mixed mode)
Linux | java version "1.7.0_25" OpenJDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

如果没有安装Java，那么可以链接到安装Java软件开发工具包（SDK）：

http://www.oracle.com/technetwork/java/javase/downloads/index.html

我们假设你已经进行了本教程之前安装了Java1.7.0_60 版本。

第2步：设置Java环境

设置 JAVA_HOME 环境变量指向到安装在机器上的 Java 基本目录的位置。例如，

Os | 描述
Windows | 设置的环境变量 JAVA_HOME 的值为 C:\ProgramFiles\java\jdk1.7.0_60
Linux | export JAVA_HOME=/usr/local/java-current

附加 Java编译器位置系统路径。

OS | 描述
Windows | 添加字符串 ; C:\Program Files\Java\jdk1.7.0_60\bin 到系统环境变量 PATH.
Linux | export PATH=$PATH:$JAVA_HOME/bin/

从命令提示符下验证命令 java-version 如上所述

第三步：安装 JFreeChart

从链接 http://www.jfree.org/jfreechart/download/ 下载JFreeChart.zip最新版本 解压下载文件库，可以链接到Java程序中的任何位置。下图显示了目录和文件的结构：

添加了JFreeChart1.0.18.jar 和 jcommon-1.0.22.jar 文件到 CLASSPATH 完整路径，如下图所示：

OS | 描述
Windows | 添加字符串 “C:\ jfreechart-1.0.18\lib\ jfreechart-1.0.18.jar” 和 “C:\ jfreechart-1.0.18\lib\ jcommon-1.0.22.jar” 到用户变量 CLASSPATH 的尾部
Linux | Export CLASSPATH=$CLASSPATH: /usr/share/jfreechart-1.0.18/lib/jfreechart-1.0.18.jar: /usr/share/jfreechart-1.0.18/lib/jcommon-1.0.22.jar

JFreeChart架构 - JFreeChart教程

本章介绍给大家介绍 JFreeChart 不同类中如何交互的概念, JFreeChart基本类层次和应用水平的架构在基于Java应用程序如何工作的。

类层次架构

类层次架构解释了如何把不同阶层的相互库交互，以创建不同类型的图表。

以下是在上述框图中使用的单元细节：

单元 | 描述
文件 | 所用的用户输入为源，用于创建该文件中的数据集。
数据库 | 所用的用户输入为源，用于创建在数据库中的数据集。
创建数据集 | 接受数据集中存储和数据集中到数据集对象。
通用数据集 | 这种类型的数据集主要用于饼图。
分类数据集 | 这种类型的数据集，用于柱状图，折线图等等。
系列数据集 | 这种类型的数据集被用于存储一系列数据和构建线图表。
系列采集数据集 | 不同类别的一系列数据集添加系列集合数据集。这种类型的数据集，用于xy折线图表。
创建图表 | 这是被执行以创建最终的图表的方法。
帧/图片 | 该图显示在一个Swing框架或创建映像。

应用层架构

应用级架构说明，其中JFreeChart库在Java应用程序内线。

客户端程序接收用户数据，然后它使根据要求使用标准Java和JFreeChart的API来生成输出在任一帧的形式，它可以直接在该应用程序或独立地在所述图像格式，如JPEG或PNG显示。

JFreeChart参考API - JFreeChart教程

在本章中，我们将讨论一些在JFreeChart库重要的软件包，类和方法。这些软件包，类和方法是最常见的，同时建立了各种使用JFreeChart库图表。

ChartFactory 类

ChartFactory是org.jfree.chart包中抽象类。它提供了实用方法的集合，用于生成标准的图表。以下是几个重要方法的列表：

类构造方法

S.N. | 描述
1 | ChartFactory() ChartFactory类的默认构造函数。

类方法

S.N. | 方法 & 描述
1 | createPieChart(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls) 此方法使用默认设置创建一个饼图。它返回JFreeChart类型的对象。
2 | createPieChart3D(java.lang.String title, PieDataset dataset, boolean legend, boolean tooltips, boolean urls) 此方法使用指定的数据集三维/3D饼图。

3
createBarChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 参数java.lang.String categoryAxisLabel标签放置在X轴的值。该参数的java.lang.String valueAxisLabel标签放置在Y轴的数值。此方法创建一个条形图。

4 | createBarChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法创建一个柱形图具有3D效果。它返回JFreeChart类型的对象。
5 | createLineChart(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法使用默认设置创建一个折线图。
6 | createLineChart3D(java.lang.String title, java.lang.String categoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法创建一个折线图与3D效果。
7 | createXYLineChart(java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, XYDataset dataset, PlotOrientation orientation, boolean legend, boolean tooltips, boolean urls) 此方法使用默认设置创建基于XYDataset的折线图。

ChartFrame 类

ChartFrame类在org.jfree.chart包中，提供所有的帧相关的功能和工具。 ChartFrame类继承自父类，如Frame, Window, Container, Component 类功能。

类构造方法

S.N. | 构造方法及描述
1 | ChartFrame (java.lang.Frame String, JfreeChart chart) 它构建一个框架/frame。
2 | Chart Frame (java.lang.Frame String, JfreeChart chart, boolean scrollpane) 它构建一个框架/frame。

类方法

S.N. | 构造方法及描述
1 | getChartPanel() 此方法返回图表面板的框架/frame。

ChartPanel 类

org.jfree.chart包中的ChartPanel类用于swing GUI部件，用于显示JfreeChart对象。

类构造方法

S.N. | 构造方法及描述
1 | ChartPanel(JFreeChart chart) 此构造一个面板/panel ，显示指定的图表。
2 | ChartPanel(JFreeChart chart, boolean useBuffer) 这个构造函数构造包含图表的面板/panel。
3 | ChartPanel(JFreeChart chart, boolean properties, boolean save, boolean print, boolean zoom, boolean tooltips) 此构造一个JFreeChart面板。

类方法

S.N. | 方法及描述
1 | setPreferredSize(java.awt.Dimension) 该方法用于java.awt中设置的帧大小。 Dimension类对象作为参数。这个方法是从javax.swing.JComponent中实现。

ChartUtilities 类

org.jfree.chart包中的CharUtilites类提供JFreeCharts包括将图表转换成图像文件格式，如PNG，JPEG和创建HTML图像映射方法的实用方法的集合。

类构造函数

S.N. | 构造方法及描述
1 | ChartUtilities() 这是类的一个默认构造函数

类方法

S.N. | 方法及描述
1 | saveChartAsPNG(java.io.File file, JfreeChart chart, int width, int height) 此方法转换和保存图表为PNG格式指定的文件。
2 | saveChartAsJPEG(java.io.File file, JfreeChart chart, int width, int height) 此方法转换并保存一个图表，以JPEG格式指定的文件。

JFreeChart 类

JFreeChart 类是在org.jfree.chart包的核心类。这个类提供了JFreeChart的方法来创建柱状图，折线图，饼图和XY坐标图，包括时间序列数据。

类构造函数

S.N. | 构造方法及描述
1 | JfreeChart(Plot plot) 此构造函数创建基于所提供的节点一个新的图表。
2 | JfreeChart(java.lang.String title, java.awt.Font titleFont, Plot plot, boolean createLegend) 该构造函数创建一个新的图表给定标题和绘图。
3 | JfreeChart(java.lang.String title, Plot plot) 该构造函数创建一个新的图表给定标题和绘图。

类方法

S.N. | 方法及描述
1 | getXYPlot() 此方法返回节点图表作为XYPlot。使用XYPolt我们可以XY图表做了一些实用操作。

PiePlot 类

这个类是org.jfree.chart.plot包的一部分，来自同一个包扩展Plot 类。这个类提供了一些方法来创建饼图块。

类的构造函数

S.N. | 构造方法及描述
1 | PiePlot() 它创建了一个新的绘图。
2 | PiePlot(PieDataset dataset) 它创建了一个绘图，饼图由指定的数据集。

类方法

S.N. | 方法及描述
1 | setStartAngle(double angle) 此方法设置起始角度和发送PlotChangeEvent向所有注册的侦听器

PiePlot3D 类

PiePlot3D类和PiePlot类在同一个包中的子类。因此，这两个类有相同的功能，PiePlot类只不过是用于创建3D图形。

类的构造函数

S.N. | 构造方法及描述
1 | PiePlot3D() 此构造函数创建没有数据集的新实例。
2 | PiePlot3D(PieDataset dataset) 该构造函数创建一个饼图和使用指定的数据集三维效果。

类方法

S.N. | 方法及描述
1 | setForegroundAlpha(float alpha) 它设置alpha透明度并向所有发送PlotChangeEvent注册的侦听器。
2 | setInteriorGap(double percent) 它设置了内部差距并发送PlotChangeEvent向所有注册的侦听器。这种控制的饼图绘图边缘与绘图区本身（即，其中部分标签显示的区域）之间的空间。这个方法是从父类PiePlot继承。

PlotOrientation 类

这是一个串行化类从org.jfree.chart.plot封装，它是用来显示一个二维曲线图的方位。方向可以是垂直的或水平的。它设置Y轴的方向。传统的绘图有一个垂直的Y轴。

字段摘要

S.N. | 类型 | 字段 & 描述
1 | PlotOrientation | HORIZONTAL 为一个曲线图，其中所述范围轴（Y轴）是水平。
2 | PlotOrientation | VERTICAL 为一个曲线图，其中所述范围轴（Y轴）是垂直的。这个默认的方向。

类方法

S.N. | 方法及描述
1 | isHorizontal() 如果这个方向是水平的，此方法返回true，否则返回false。
2 | isVertical() 如果这个方向是VERTICAL，此方法返回true，否则返回false。

XYPlot 类

这在org.jfree.chart.plot包可用一个通用类，并将其用于在（X，Y）对的形式标绘数据。这个曲线图可以从实现XYDataSet接口的任何其它类中使用的数据。 XYPlot利用一个XYItemRenderer的画在图上的每个点。

类的构造函数

S.N. | 构造方法及描述
1 | XYPlot() 该构造器没有数据集，无轴，无渲染器创建一个新的XYPlot实例。
2 | XYPlot(XYDataset dataset，ValueAxis domainAxis，ValueAxis rangeAxis，XYItemRenderer renderer），此构造函数创建一个新的绘图并指定数据集，轴和渲染。

类方法

S.N. | 方法及描述
1 | setRenderer(XYItemRenderer renderer) 此方法设置渲染器的主要数据集，并发送更改事件向所有注册的侦听器。

NumberAxis 类

这个类是org.jfree.chart.axis封装，它可以访问任意轴的数值数据。当我们设置任何轴的范围为默认值，它根据所述数据的范围配合。但使用NumberAxis，类我们可以设置较低的利润率和定义域和值域轴的上侧边距。

类的构造函数

S.N. | 构造方法及描述
1 | NumberAxis( ) 这是NumberAxis一个默认的构造函数。
2 | NumberAxis( java.lang.String label) 构造函数NumberAxis使用必要的默认值在哪里。

类方法

S.N. | 方法及描述
1 | setLowerMargin(double margin) 它为轴心的利润率较低（为轴心范围的百分比），并发送一个AxisChangeEvent所有已注册的侦听器。这个方法是从父类ValueAxis继承。
2 | setUpperMargin(double margin) 它设置于所述轴的上缘（视轴范围的百分比），并发送一个AxisChangeEvent给所有注册的监听器。这种方法也存在于ValueAxis类。

XYLineAndShapeRenderer 类

这是在org.jfree.chart.renderer.xy包下的类，它需要连接数据点与线，并绘制形状，在每个数据点下是可用的。这个渲染器类是专为XYPlot类配合使用。

类的构造函数

S.N. | 构造和描述
1 | XYLineAndShapeRenderer() 它创建了一个新的渲染器有两种线条和形状可见。
2 | XYLineAndShapeRenderer (boolean lines, boolean shapes) 它创建了一个新的渲染与特定的属性。

类方法

S.N. | 方法及描述
1 | setSeriesPaint(int series, java.awt.Paint paint) 此方法设置用于一系列的涂料，并发送RendererChangeEvent给所有注册的监听器。这个方法是从AbstratRenderer抽象类从渲染器包中JFreeChart的API。
2 | setSeriesStroke(int series, java.awt.Stroke stroke) 此方法设置用于一系列的流程，并发送RendererChangeEvent向所有注册的侦听器。这个方法是从AbstratRenderer抽象类，它是这个包的超类。

XYItemRenderer通用数据集

这是用于使一个单一的（X，Y）格式项在XYPlot接口。org.Jfree.data.general包其具有类和接口，以定义不同类型的数据集来构造图。

PieDataset

这是作为一个通用的数据集，其中值与键相关联的接口。正如其名称所暗示的，可以使用这个数据集提供数据的饼图。此接口扩展KeyedValues数据集的接口。所有使用此接口的方法取自KeyedValues，Values和数据集的接口。

DefaultPieDataset 类

这是一个默认的实现类PieDataset接口。

类的构造函数

S.N. | 构造函数和描述
1 | DefaultPieDataset() 该构造函数创建一个新的数据集，初始为空。
2 | DefaultPieDataset(KeyedValues data) 它从一个KeyedValues实例复制数据创建了一个新的数据集。

类方法

S.N. | 方法及描述
1 | setValue(java.lang.Comparable key, double value) 它设置数据值的键，发送DatasetChangeEvent向所有注册的侦听器。
2 | setValue(java.lang.Comparable key, java.lang.Number value) 它设置数据值的键，发送DatasetChangeEvent向所有注册的侦听器。

SeriesException 类

这是一个异常类。它会引发发生在时间序列中数据集的数据的异常。异常是引发上的重复或无效数据的次数。时间序列不能与重复应用，格式必须是有效的。

DefaultCategoryDataset

这是一个默认的实现类CategoryDataset接口。

类的构造函数

S.N. | 构造函数及描述
1 | DefaultCategoryDataset() 此构造函数创建新的空数据集。

类方法

S.N. | 方法及描述
1 | addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 这种方法增加了一个值，以使用可比的键表。
2 | addValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 这种方法增加了一个值的表。
3 | setValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 此方法添加或在表中更新的值，并发送aDatasetChangeEvent给所有注册的监听器。
4 | setValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey) 此方法添加或在表中更新的值，并发送DatasetChangeEvent给所有注册的监听器。

参见JFreeChart的API，用于各种其他方法和字段的详细信息。

序列数据集

系列数据集用于XY图表。该软件包是org.Jfree.data.xy，其中包含类和属于XY图表接口。核心接口是XYDataset。

XYDataset

这是通过该数据中的（X，Y）的项目的形式可被访问的接口。正如其名称所提示的，可以使用这个数据集服务XY图表。一些在这个接口中的方法都取自SeriesDateset接口。

XYZDataset

这是通过该数据的形式（x，y，z）的项目可被访问的接口。正如其名称所暗示的，可以使用这个数据集服务XYZ图。一些在这个接口中的方法都取自SeriesDateset。

XYSeries

这是一类，它代表了在所述形式的零个或多个数据项（x，y）的序列。默认情况下，该系列中的数据项都按升序排列由x值，并重复允许的x值。无论是排序和复制缺省值可以在构造函数中被改变。 Y值可以表示为空值代表缺失值。

类构造函数

S.N. | 构造函数描述
1 | XYSeries(java.lang.Comparable key) 该构造函数创建一个新的空系列。
2 | XYSeries(java.lang.Comparable key, boolean autoSort) 它构造一个新的空系列，具有自动排序标志集的请求，并且重复的值是允许的。
3 | XYSeries(java.lang.Comparable key, boolean autoSort, boolean allowDuplicateXValues) 它构造一个新的xy系列不包含任何数据。

类方法

S.N. | 方法描述
1 | add(double x, double y) 这种方法增加了数据项成系列。

在上述方法中使用的教程例子。如果想了解其余的方法和字段，请参考JFreeChart的API。

XYSeriesCollection

XYSeriesCollection类有类似父类AbstractIntervelDataset，AbstractXYDatset，AbstractSeriesDataset和AbstractDataset。一些在这个类中的方法属于这个类的父类。

类的构造函数

S.N. | 构造函数描述
1 | XYSeriesCollection() 它构造一个空的数据集。
2 | XYSeriesCollection(XYSeries xyseries)它构建了一个数据集，并用一个系列的填充。

类方法

S.N. | 方法及描述
1 | addSeries(XYSeries series) 这种方法增加了一系列的收集和发送DatasetChangeEvent向所有注册的侦听器。

参见JFreeChart的API其余的方法和字段。

Default XYZDataset :

DefaultXYZDataset类都有父类，如AbstractIntervelDataset，AbstractXYDatset，AbstractSeriesDataset，AbstractDataset和AbstractXYZDataset。一些在这个类中的方法属于这一类的父类。

类的构造函数

S.N. | 构造方法及描述
1 | DefaultXYZDataset() 它构造一个空的数据集。

类方法

S.N. | 方法及描述
1 | addSeries(java.lang.Comparable seriesKey, double[ ][ ] data ) 该方法增加了一系列的收集和发送DatasetChangeEvent向所有注册的侦听器。

请参考JFreeChart的API，其余的方法和字段。

JFreeCharts的时间序列

该软件包是org.jfree.data.time。该软件包包含用于时间相关的数据的类和接口。

TimeSeries :

此类表示数据项的期值的形式，其中一段是RegularTimePeriod抽象类，如时间，日，小时，分钟和秒类的一些实例序列。

类的构造函数

S.N. | 构造方法及描述
1 | TimeSeries(java.lang.Comparable name) 它创建新的空系列。
2 | TimeSeries(java.lang.Comarable name, java.lang.String domain, java.lang.Strin range) 它会创建一个不包含任何数据的新的时间序列。

类方法

S.N. | 方法及描述
1 | add(RegularTimePeriod period,double value) 该方法增加了一个新的数据项用以串联。

其余的方法和字段参见JFreeChart的API。

TimeSeriesCollection :

这是作为时间序列的对象的集合的类。这个类实现了XYDataset接口，以及它扩展了IntervelXYDataset接口。这使得它可以方便地收集序列数据对象。

类的构造函数

S.N. | 构造方法及描述
1 | TimeSeriesCollection() 它构造一个空的数据集，绑在默认时区。
2 | TimeSeriesCollection(TimeSeries series) 它构造一个包含单个系列（更多可添加），绑在默认时区的数据集。
3 | TimeSeriesCollection(TimeSeries series, java.util.TimeZone zone) 它构造包含单个系列（更可添加），绑定到特定的时间段的数据集。
4 | TimeSeriesCollection(java.util.TimeZone zone) 它构造一个空的数据集时，绑定到特定的时间区。

类方法

S.N. | 方法及描述
1 | addSeries(TimeSeries series) 方法增加了一系列的收集和发送DatasetChangeEvent向所有注册的侦听器。

其余的方法和字段请参考JFreeChart的API。

Second 类:

这个类表示一个特定的日子一秒钟。这个类是不可变的，这是对所有RegularTimePeriod子类的要求。

类的构造函数

S.N. | 构造函数及描述
1 | Second() 它构造一个新的Second，基于系统的日期/时间。
2 | Second(java.util.Date time) 它构造从指定日期/时间和默认时区的新实例。
3 | Second(java.util.Date time, java.util.TimeZone zone, java.util.Locale locale) 它创建基于所提供的时间和时区的新的Second对象。
4 | Second(int second, int minute, int hour, int day, int month, int year)它创建了一个新的Second对象。
5 | Second(int second, Minute minute) 它构建了一个新的Second。

类方法

S.N. | 方法及描述
1 | getSecond() 它返回分钟和秒。
2 | next() 它返回当前的下一秒。

其余的方法和字段请参考JFreeChart的API。

JFreeCharts 中的帧:

该软件包是org.jfree.ui。这是包所属JFreeChart的JCommons的API。它包含用于创建预配置的图表框架的实用程序类。

ApplicationFrame :

这是用于创建简单的应用程序的主框架的基类。帧监听窗口关闭事件，并作出反应，关闭JVM。这是很好的小型演示应用。对于企业应用程序，需要使用一些更稳健的东西。在这个类中的主要核心方法取自Component, Container, Window, Frame 和Jframe类。

类构造函数

S.N. | 构造方法及描述
1 | ApplicationFrame(java.lang.String title) 它会创建一个字符串标题的应用程序框架。

这个类有助于创建AWT框架。这就是为什么我们使用这个类作为父类在本教程中的例子的原因。

其采取父类的方法用于打开一个框架，关闭一个框架，改变大小，改变背景或前景颜色和监听器。

RefineryUtilities :

这是关于用户界面的工具方法的类的集合。

类方法

S.N. | 方法及描述
1 | centerFrameOnScreen(java.awt.Window frame) 它定位在屏幕的中间的指定帧。

在上述方法中使用的教程例子以外的类，方法和字段参见JFreeChart的API。

JFreeChart饼图 - JFreeChart教程

在饼图中，每个扇区的弧长成正比它代表的数量。本章演示了如何使用JFreeChart 从一个给定的业务数据创建饼图。

业务数据

下面的例子描述了移动销售饼图。以下是不同移动品牌和销售(每天单位)列表。

S.N. | 手机品牌 | 销售(天)
1 | Iphone 5S | 20
2 | Samsung Grand | 20
3 | MOTO G | 40
4 | Nokia Lumia | 10

基于AWT 应用

以下是对从上述给定的信息创建饼图的代码。此代码可以帮助嵌入一个饼图在任何AWT 应用程序。

import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class PieChart_AWT extends ApplicationFrame
{
   public PieChart_AWT( String title )
   {
      super( title );
      setContentPane(createDemoPanel( ));
   }
   private static PieDataset createDataset( )
   {
      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue( "IPhone 5s" , new Double( 20 ) );
      dataset.setValue( "SamSung Grand" , new Double( 20 ) );
      dataset.setValue( "MotoG" , new Double( 40 ) );
      dataset.setValue( "Nokia Lumia" , new Double( 10 ) );
      return dataset;
   }
   private static JFreeChart createChart( PieDataset dataset )
   {
      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales",  // chart title
         dataset,        // data
         true,           // include legend
         true,
         false);

      return chart;
   }
   public static JPanel createDemoPanel( )
   {
      JFreeChart chart = createChart(createDataset( ) );
      return new ChartPanel( chart );
   }
   public static void main( String[ ] args )
   {
      PieChart_AWT demo = new PieChart_AWT( "Mobile Sales" );
      demo.setSize( 560 , 367 );
      RefineryUtilities.centerFrameOnScreen( demo );
      demo.setVisible( true );
   }
}

让我们继续上面PieChart_AWT.java文件中的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac PieChart_AWT.java
$java PieChart_AWT

如果一切顺利，它会编译并运行生成以下饼图：

如果不需要在应用程序嵌入图表中，那么可以在命令提示符下创建图表的图像。 JFreeChart允许以JPG或PNG格式保存图表图像。

JPEG创建图像

让我们重新写上面的例子，生成命令行JPEG图像。以下是通过JFreeChart库，按要求提供两个API，用它来生成PNG或JPEG图像。

saveChartAsPNG() - API用来保存图像为PNG格式。

saveChartAsJPEG() - API用来保存图像JPEG格式。

import java.io.*;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart {
   public static void main( String[ ] args ) throws Exception
   {

      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue("IPhone 5s", new Double( 20 ) );
      dataset.setValue("SamSung Grand", new Double( 20 ) );
      dataset.setValue("MotoG", new Double( 40 ) );
      dataset.setValue("Nokia Lumia", new Double( 10 ) );

      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales", // chart title
         dataset, // data
         true, // include legend
         true,
         false);

      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File pieChart = new File( "PieChart.jpeg" );
      ChartUtilities.saveChartAsJPEG( pieChart , chart , width , height );
   }
}

保持PieChart.java文件中如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac PieChart.java
$java PieChart

如果一切顺利，它会编译并运行在当前的目录中创建JPEG图像文件为namedPieChart.jpeg。

JFreeChart条形图 - JFreeChart教程

本章演示了如何使用JFreeChart从一个给定的业务数据创建条形图。

条形图使用不同的方位(水平或垂直)条，以显示不同类别的比较。图表中的一个轴(域轴)示出了特定的域进行比较，并在另一个轴(范围轴)表示的离散值。

业务数据

下面的例子描述了各种汽车用统计柱状图。以下是汽车品牌以及它们的不同特点，我们将展示使用一个条形图的列表：

汽车 | 速度 | 用户评价 | 公里数 | 安全性
Fiat | 1.0 | 3.0 | 5.0 | 5.o
--- | --- | --- | --- | ---
Audi | 5.0 | 6.0 | 10.0 | 4.0
--- | --- | --- | --- | ---
Ford | 4.0 | 2.0 | 3.0 | 6.0
--- | --- | --- | --- | ---

基于AWT的应用

以下是对从上述给定的信息创建条形图的代码。此代码可以在AWT的应用程序嵌入一个条形图。

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class BarChart_AWT extends ApplicationFrame
{
   public BarChart_AWT( String applicationTitle , String chartTitle )
   {
      super( applicationTitle );
      JFreeChart barChart = ChartFactory.createBarChart(
         chartTitle,
         "Category",
         "Score",
         createDataset(),
         PlotOrientation.VERTICAL,
         true, true, false);

      ChartPanel chartPanel = new ChartPanel( barChart );
      chartPanel.setPreferredSize(new java.awt.Dimension( 560 , 367 ) );
      setContentPane( chartPanel );
   }
   private CategoryDataset createDataset( )
   {
      final String fiat = "FIAT";
      final String audi = "AUDI";
      final String ford = "FORD";
      final String speed = "Speed";
      final String millage = "Millage";
      final String userrating = "User Rating";
      final String safety = "safety";
      final DefaultCategoryDataset dataset =
      new DefaultCategoryDataset( );

      dataset.addValue( 1.0 , fiat , speed );
      dataset.addValue( 3.0 , fiat , userrating );
      dataset.addValue( 5.0 , fiat , millage );
      dataset.addValue( 5.0 , fiat , safety );

      dataset.addValue( 5.0 , audi , speed );
      dataset.addValue( 6.0 , audi , userrating );
      dataset.addValue( 10.0 , audi , millage );
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );
      dataset.addValue( 2.0 , ford , userrating );
      dataset.addValue( 3.0 , ford , millage );
      dataset.addValue( 6.0 , ford , safety );

      return dataset;
   }
   public static void main( String[ ] args )
   {
      BarChart_AWT chart = new BarChart_AWT("Car Usage Statistics", "Which car do you like?);
      chart.pack( );
      RefineryUtilities.centerFrameOnScreen( chart );
      chart.setVisible( true );
   }
}

保持BarChart_AWT.java文件中的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac BarChar_AWT.java
$java BarChart_AWT

如果一切顺利，它会编译并运行生成以下条形图：

JPEG创建图像

让我们重新写上面的例子中，使用命令行生成JPEG图像。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;

public class BarChart
{
   public static void main( String[ ] args )throws Exception
   {

      final String fiat = "FIAT";
      final String audi = "AUDI";
      final String ford = "FORD";
      final String speed = "Speed";
      final String millage = "Millage";
      final String userrating = "User Rating";
      final String safety = "safety";

      final DefaultCategoryDataset dataset = new DefaultCategoryDataset( );

      dataset.addValue( 1.0 , fiat , speed );
      dataset.addValue( 3.0 , fiat , userrating );
      dataset.addValue( 5.0 , fiat , millage );
      dataset.addValue( 5.0 , fiat , safety );

      dataset.addValue( 5.0 , audi , speed );
      dataset.addValue( 6.0 , audi , userrating );
      dataset.addValue( 10.0 , audi , millage );
      dataset.addValue( 4.0 , audi , safety );

      dataset.addValue( 4.0 , ford , speed );
      dataset.addValue( 2.0 , ford , userrating );
      dataset.addValue( 3.0 , ford , millage );
      dataset.addValue( 6.0 , ford , safety );

      JFreeChart barChart = ChartFactory.createBarChart(
         "CAR USAGE STATIStICS",
         "Category", "Score",
         dataset,PlotOrientation.VERTICAL,
         true, true, false);

      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File BarChart = new File( "BarChart.jpeg" );
      ChartUtilities.saveChartAsJPEG( BarChart , barChart , width , height );
   }
}

保存BarChart.java文件中如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac BarChart.java
$java BarChart

如果一切顺利，它会编译并运行在当前的目录中创建JPEG图像文件namedBarChart.jpeg

JFreeChart线型图 - JFreeChart教程

线图或折线图来显示信息为一系列由直线段连接的数据点(标记)。线图显示数据在相同的时间频率如何变化。本章从一个给定的业务数据演示如何使用JFreeChart创建线型图。

业务数据

下面的示例绘制折线图显示从1970年开始学校在不同年份开通数量。

给定的数据如下：

年份 | 学校数量
1970 | 15
1980 | 30
1990 | 60
2000 | 120
2013 | 240
2014 | 300

基于AWT的应用

以下是对从上述给定的信息创建线型图的代码。此代码可以帮助在AWT的应用程序嵌入一个折线图。

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineChart_AWT extends ApplicationFrame
{
   public LineChart_AWT( String applicationTitle , String chartTitle )
   {
      super(applicationTitle);
      JFreeChart lineChart = ChartFactory.createLineChart(
         chartTitle,
         "Years","Number of Schools",
         createDataset(),
         PlotOrientation.VERTICAL,
         true,true,false);

      ChartPanel chartPanel = new ChartPanel( lineChart );
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
      setContentPane( chartPanel );
   }

   private DefaultCategoryDataset createDataset( )
   {
      DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
      dataset.addValue( 15 , "schools" , "1970" );
      dataset.addValue( 30 , "schools" , "1980" );
      dataset.addValue( 60 , "schools" ,  "1990" );
      dataset.addValue( 120 , "schools" , "2000" );
      dataset.addValue( 240 , "schools" , "2010" );
      dataset.addValue( 300 , "schools" , "2014" );
      return dataset;
   }
   public static void main( String[ ] args )
   {
      LineChart_AWT chart = new LineChart_AWT(
      "School Vs Years" ,
      "Numer of Schools vs years");

      chart.pack( );
      RefineryUtilities.centerFrameOnScreen( chart );
      chart.setVisible( true );
   }
}

保存LineChart_AWT.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac LineChart_AWT.java
$java LineChart_AWT

如果一切顺利，它会编译并运行生成以下线图：

创建JPEG图像

让我们重新编写上面的例子，在命令行执行生成JPEG图像。

import java.io.*;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineChart
{
   public static void main( String[ ] args ) throws Exception
   {
      DefaultCategoryDataset line_chart_dataset = new DefaultCategoryDataset();
      line_chart_dataset.addValue( 15 , "schools" , "1970" );
      line_chart_dataset.addValue( 30 , "schools" , "1980" );
      line_chart_dataset.addValue( 60 , "schools" , "1990" );
      line_chart_dataset.addValue( 120 , "schools" , "2000" );
      line_chart_dataset.addValue( 240 , "schools" , "2010" );
      line_chart_dataset.addValue( 300 , "schools" , "2014" );

      JFreeChart lineChartObject = ChartFactory.createLineChart(
         "Schools Vs Years","Year",
         "Schools Count",
         line_chart_dataset,PlotOrientation.VERTICAL,
         true,true,false);

      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File lineChart = new File( "LineChart.jpeg" );
      ChartUtilities.saveChartAsJPEG(lineChart ,lineChartObject, width ,height);
   }
}

让我们保存LineChart.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac LineChart.java
$java LineChart

如果一切顺利，它将编译和执行在当前的目录中创建JPEG图像文件namedLineChart.jpeg。

JFreeChart XY图 - JFreeChart教程

在xy图(散点图)是根据一个数据系列组成的x和y值的列表。每个值对(x，y)是坐标系中的一个点。这里1值确定水平(X)位置，而另一个确定垂直(Y)位置。本章演示了如何使用JFreeChart从一个给定的业务数据创建XY图表。

业务数据

考虑这种情况，我们要创建一个XY图表所有主要浏览器的一个例子。在这里，不同的性能分数是从不同类型的人们聚集，如下所示：

Firefox | Category(X) | Score(Y)
1.0 | 1.0
2.0 | 4.0
3.0 | 3.0

Chrome | Category(X) | Score(Y)
1.0 | 4.0
2.0 | 5.0
3.0 | 6.0

IE | Category(X) | Score(Y)
3.0 | 4.0
4.0 | 5.0
5.0 | 4.0

基于AWT的应用

以下是对从上述给定的信息创建XY图表的代码。此代码可以在AWT应用程序嵌入一个XY图表。

import java.awt.Color;
import java.awt.BasicStroke;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

public class XYLineChart_AWT extends ApplicationFrame
{
   public XYLineChart_AWT( String applicationTitle, String chartTitle )
   {
      super(applicationTitle);
      JFreeChart xylineChart = ChartFactory.createXYLineChart(
         chartTitle ,
         "Category" ,
         "Score" ,
         createDataset() ,
         PlotOrientation.VERTICAL ,
         true , true , false);

      ChartPanel chartPanel = new ChartPanel( xylineChart );
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
      final XYPlot plot = xylineChart.getXYPlot( );
      XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer( );
      renderer.setSeriesPaint( 0 , Color.RED );
      renderer.setSeriesPaint( 1 , Color.GREEN );
      renderer.setSeriesPaint( 2 , Color.YELLOW );
      renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
      renderer.setSeriesStroke( 1 , new BasicStroke( 3.0f ) );
      renderer.setSeriesStroke( 2 , new BasicStroke( 2.0f ) );
      plot.setRenderer( renderer );
      setContentPane( chartPanel );
   }

   private XYDataset createDataset( )
   {
      final XYSeries firefox = new XYSeries( "Firefox" );
      firefox.add( 1.0 , 1.0 );
      firefox.add( 2.0 , 4.0 );
      firefox.add( 3.0 , 3.0 );
      final XYSeries chrome = new XYSeries( "Chrome" );
      chrome.add( 1.0 , 4.0 );
      chrome.add( 2.0 , 5.0 );
      chrome.add( 3.0 , 6.0 );
      final XYSeries iexplorer = new XYSeries( "InternetExplorer" );
      iexplorer.add( 3.0 , 4.0 );
      iexplorer.add( 4.0 , 5.0 );
      iexplorer.add( 5.0 , 4.0 );
      final XYSeriesCollection dataset = new XYSeriesCollection( );
      dataset.addSeries( firefox );
      dataset.addSeries( chrome );
      dataset.addSeries( iexplorer );
      return dataset;
   }

   public static void main( String[ ] args )
   {
      XYLineChart_AWT chart = new XYLineChart_AWT("Browser Usage Statistics", "Which Browser are you using?");
      chart.pack( );
      RefineryUtilities.centerFrameOnScreen( chart );
      chart.setVisible( true );
   }
}

让我们保存XYLineChart_AWT.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac XYLineChart_AWT.java
$java XYLineChart_AWT

如果一切顺利，它会编译并运行生成以下XY图：

创建JPEG图像

让我们重新编写上面的例子，在命令行生成JPEG图像。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.chart.ChartUtilities;

public class XYLineChart_image
{
   public static void main( String[ ] args )throws Exception
   {
      final XYSeries firefox = new XYSeries( "Firefox" );
      firefox.add( 1.0 , 1.0 );
      firefox.add( 2.0 , 4.0 );
      firefox.add( 3.0 , 3.0 );
      final XYSeries chrome = new XYSeries( "Chrome" );
      chrome.add( 1.0 , 4.0 );
      chrome.add( 2.0 , 5.0 );
      chrome.add( 3.0 , 6.0 );
      final XYSeries iexplorer = new XYSeries( "InternetExplorer" );
      iexplorer.add( 3.0 , 4.0 );
      iexplorer.add( 4.0 , 5.0 );
      iexplorer.add( 5.0 , 4.0 );
      final XYSeriesCollection dataset = new XYSeriesCollection( );
      dataset.addSeries( firefox );
      dataset.addSeries( chrome );
      dataset.addSeries( iexplorer );

      JFreeChart xylineChart = ChartFactory.createXYLineChart(
         "Browser usage statastics",
         "Category",
         "Score",
         dataset,
         PlotOrientation.VERTICAL,
         true, true, false);

      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File XYChart = new File( "XYLineChart.jpeg" );
      ChartUtilities.saveChartAsJPEG( XYChart, xylineChart, width, height);
   }
}

让我们保存在XYLineChart_image.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac XYLineChart_image.java
$java XYLineChart_image

如果一切顺利，它会编译并运行在当前的目录中创建JPEG图像文件namedXYLineChart.jpeg。

JFreeChart 3D饼图/条形图 - JFreeChart教程

三维/3D图表是那些显示在一个三维格式。可以使用这些图表来提供更好的显示效果和清晰的信息。三维/3D饼图是饼图另外一个不错的3D效果。 3D效果可以通过添加一些额外的代码来实现，它会创建一个饼图3D效果。

3D饼图

请看下面的例子来描述移动销售三维饼图。以下是不同移动品牌和销售(每天)名单。

S.N. | 手机品牌 | 销量 (天)
1 | Iphone 5S | 20
2 | Samsung Grand | 20
3 | MOTO G | 40
4 | Nokia Lumia | 10

以下是对从上述给定的信息创建3D饼图的代码。此代码可以帮助嵌入一个饼图在AWT应用程序中。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.ChartUtilities;

public class PieChart3D
{
   public static void main( String[ ] args )throws Exception
   {
      DefaultPieDataset dataset = new DefaultPieDataset( );
      dataset.setValue( "IPhone 5s" , new Double( 20 ) );
      dataset.setValue( "SamSung Grand" , new Double( 20 ) );
      dataset.setValue( "MotoG" , new Double( 40 ) );
      dataset.setValue( "Nokia Lumia" , new Double( 10 ) );

      JFreeChart chart = ChartFactory.createPieChart3D(
         "Mobile Sales" ,  // chart title
         dataset ,         // data
         true ,            // include legend
         true,
         false);

      final PiePlot3D plot = ( PiePlot3D ) chart.getPlot( );
      plot.setStartAngle( 270 );
      plot.setForegroundAlpha( 0.60f );
      plot.setInteriorGap( 0.02 );
      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File pieChart3D = new File( "pie_Chart3D.jpeg" );
      ChartUtilities.saveChartAsJPEG( pieChart3D , chart , width , height );
   }
}

让我们保存在PieChart3D.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac PieChart3D.java
$java PieChart3D

如果一切顺利，它会编译并运行，以创建一个名为PieChart3D.jpeg 如以下3D饼图JPEG图像文件：

3D条形图

三维条形图是一样的条形图另外一个不错的3D效果。 3D效果可以通过添加一些额外的代码来实现，它会创建一个柱形图3D效果。看看下面的例子，描绘各种汽车的统计数据3D条形图。以下是汽车品牌以及它们的不同特点，我们将展示使用一个条形图的列表：

Car | Speed | User Rating | Millage | Safety
FIAT | 1.0 | 3.0 | 5.0 | 5.o
--- | --- | --- | --- | ---
AUDI | 5.0 | 6.0 | 10.0 | 4.0
--- | --- | --- | --- | ---
FORD | 4.0 | 2.0 | 3.0 | 6.0
--- | --- | --- | --- | ---

下面的代码从上面给出的信息来创建3D条形图。此代码可以帮助嵌入一个条形图在AWT应用程序中。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;

public class BarChart3D
{
   public static void main( String[ ] args )throws Exception
   {
      final String fait = "FAIT";
      final String audi = "AUDI";
      final String ford = "FORD";
      final String speed = "Speed";
      final String popular = "Popular";
      final String mailage = "Mailage";
      final String userrating = "User Rating";
      final String safty = "safty";
      final DefaultCategoryDataset dataset = new DefaultCategoryDataset( );

      dataset.addValue( 1.0 , fait , speed );
      dataset.addValue( 4.0 , fait , popular );
      dataset.addValue( 3.0 , fait , userrating );
      dataset.addValue( 5.0 , fait , mailage );
      dataset.addValue( 5.0 , fait , safty );
      dataset.addValue( 5.0 , audi , speed );
      dataset.addValue( 7.0 , audi , popular );
      dataset.addValue( 6.0 , audi , userrating );
      dataset.addValue( 10.0 , audi , mailage );
      dataset.addValue( 4.0 , audi , safty );
      dataset.addValue( 4.0 , ford , speed );
      dataset.addValue( 3.0 , ford , popular );
      dataset.addValue( 2.0 , ford , userrating );
      dataset.addValue( 3.0 , ford , mailage );
      dataset.addValue( 6.0 , ford , safty );
      JFreeChart barChart = ChartFactory.createBarChart3D(
         "Car Usage Statistics",
         "Category",
         "Score",
         dataset,
         PlotOrientation.VERTICAL,
         true, true, false);

      int width = 640; /* Width of the image */
      int height = 480; /* Height of the image */
      File barChart3D = new File( "barChart3D.jpeg" );
      ChartUtilities.saveChartAsJPEG( barChart3D, barChart, width, height);
   }
}

让我们保存在BarChart3D.java文件如上面的Java代码，然后从命令提示符下编译并运行它，如下所示：

$javac BarChart3D.java
$java BarChart3

如果一切正常，它会编译并运行创建的JPEG图像fileBarChart3D.jpeg，具有下列3D条形图：

JFreeChart气泡图表 - JFreeChart教程

本章演示如何使用JFreeChart从一个给定的业务数据创建气泡图表。使用气泡图显示在三维方式的信息。气泡绘制在其中(x，y)坐标相交的地方。气泡的大小被认为是范围或X和Y轴的数量。

业务数据

考虑不同的人的年龄，体重和工作能力可能不太相同。能力可以视为对该被绘制为图表中的气泡的小时数。

AGE | 30 | 40 | 50 | 60 | 70 | 80
10 | 4 | WORK
20 | 5
30 | 10
40 | 8
50 | 9
60 | 6

基于AWT的应用

以下是对从上述给定的信息创建气泡图表的代码。此代码可以帮助嵌入一个气泡图在AWT应用程序。

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class BubbleChart_AWT extends ApplicationFrame
{
   public BubbleChart_AWT( String s )
   {
      super( s );
      JPanel jpanel = createDemoPanel( );
      jpanel.setPreferredSize(new Dimension( 560 , 370 ) );
      setContentPane( jpanel );
   }

   private static JFreeChart createChart( XYZDataset xyzdataset )
   {
      JFreeChart jfreechart = ChartFactory.createBubbleChart(
         "AGE vs WEIGHT vs WORK",
         "Weight",
         "AGE",
         xyzdataset,
         PlotOrientation.HORIZONTAL,
         true, true, false);

      XYPlot xyplot = ( XYPlot )jfreechart.getPlot( );
      xyplot.setForegroundAlpha( 0.65F );
      XYItemRenderer xyitemrenderer = xyplot.getRenderer( );
      xyitemrenderer.setSeriesPaint( 0 , Color.blue );
      NumberAxis numberaxis = ( NumberAxis )xyplot.getDomainAxis( );
      numberaxis.setLowerMargin( 0.2 );
      numberaxis.setUpperMargin( 0.5 );
      NumberAxis numberaxis1 = ( NumberAxis )xyplot.getRangeAxis( );
      numberaxis1.setLowerMargin( 0.8 );
      numberaxis1.setUpperMargin( 0.9 );

      return jfreechart;
   }

   public static XYZDataset createDataset( )
   {
      DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset();

      double ad[ ] = { 30 , 40 , 50 , 60 , 70 , 80 };
      double ad1[ ] = { 10 , 20 , 30 , 40 , 50 , 60 };
      double ad2[ ] = { 4 , 5 , 10 , 8 , 9 , 6 };
      double ad3[][] = { ad , ad1 , ad2 };
      defaultxyzdataset.addSeries( "Series 1" , ad3 );

      return defaultxyzdataset;
   }

   public static JPanel createDemoPanel( )
   {
      JFreeChart jfreechart = createChart( createDataset( ) );
      ChartPanel chartpanel = new ChartPanel( jfreechart );

      chartpanel.setDomainZoomable( true );
      chartpanel.setRangeZoomable( true );

      return chartpanel;
   }

   public static void main( String args[ ] )
   {
      BubbleChart_AWT bubblechart = new BubbleChart_AWT( "Bubble Chart_frame" );

      bubblechart.pack( );
      RefineryUtilities.centerFrameOnScreen( bubblechart );
      bubblechart.setVisible( true );
   }
}

让我们保存上面的Java代码在BubbleChart_AWT.java文件，然后从命令提示符下编译并运行它，如下所示：

$javac BubbleChart_AWT.java
$java BubbleChart_AW

如果一切顺利，它会编译并运行生成以下气泡图：

创建JPEG图像

让我们重新编写上面的例子，在命令行生成JPEG图像。

import java.io.*;
import java.awt.Color;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.chart.ChartUtilities;

public class BubbleChart_image
{
   public static void main( String args[ ] )throws Exception
   {
      DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset( );
      double ad[ ] = { 30 , 40 , 50 , 60 , 70 , 80 };
      double ad1[ ] = { 10 , 20 , 30 , 40 , 50 , 60 };
      double ad2[ ] = { 4 , 5 , 10 , 8 , 9 , 6 };
      double ad3[ ][ ] = { ad , ad1 , ad2 };
      defaultxyzdataset.addSeries( "Series 1" , ad3 );

      JFreeChart jfreechart = ChartFactory.createBubbleChart(
         "AGE vs WEIGHT vs WORK",
         "Weight",
         "AGE",
         defaultxyzdataset,
         PlotOrientation.HORIZONTAL,
         true, true, false);

      XYPlot xyplot = ( XYPlot )jfreechart.getPlot( );
      xyplot.setForegroundAlpha( 0.65F );
      XYItemRenderer xyitemrenderer = xyplot.getRenderer( );
      xyitemrenderer.setSeriesPaint( 0 , Color.blue );
      NumberAxis numberaxis = ( NumberAxis )xyplot.getDomainAxis( );
      numberaxis.setLowerMargin( 0.2 );
      numberaxis.setUpperMargin( 0.5 );
      NumberAxis numberaxis1 = ( NumberAxis )xyplot.getRangeAxis( );
      numberaxis1.setLowerMargin( 0.8 );
      numberaxis1.setUpperMargin( 0.9 );

      int width = 560; /* Width of the image */
      int height = 370; /* Height of the image */
      File bubbleChart = new File("BubbleChart.jpeg");
      ChartUtilities.saveChartAsJPEG(bubbleChart,jfreechart,width,height);
   }
}

让我们保存上面的Java代码在BubbleChart_image.java文件，然后从命令提示符下编译并运行它，如下所示：

$javac BubbleChart_image.java
$java BubbleChart_image

如果一切顺利，它会编译并运行在当前的目录中创建的JPEG图像文件namedBubbleChart.jpeg。

JFreeChart时序图 - JFreeChart教程

时序图表显示的数据点在相等的时间间隔序列变化。本章演示了如何从一个给定的业务数据使用JFreeChart，建立时序图。

业务数据

让我们考虑通过使用标准 Java API 的 Math.random()产生的各种随机数。我们使用这些数字产生一个时间序列图。可以生成用于发生错误的总数在自己的网站给定的时间间隔类似的图表。

基于AWT的应用

下面是创建由Math.random()产生的数字时间的代码在给定时间内的序列图。

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class TimeSeries_AWT extends ApplicationFrame
{
   public TimeSeries_AWT( final String title )
   {
      super( title );
      final XYDataset dataset = createDataset( );
      final JFreeChart chart = createChart( dataset );
      final ChartPanel chartPanel = new ChartPanel( chart );
      chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 370 ) );
      chartPanel.setMouseZoomable( true , false );
      setContentPane( chartPanel );
   }

   private XYDataset createDataset( )
   {
      final TimeSeries series = new TimeSeries( "Random Data" );
      Second current = new Second( );
      double value = 100.0;
      for (int i = 0; i < 4000; i++)
      {
         try
         {
            value = value + Math.random( ) - 0.5;
            series.add(current, new Double( value ) );
            current = ( Second ) current.next( );
         }
         catch ( SeriesException e )
         {
            System.err.println("Error adding to series");
         }
      }

      return new TimeSeriesCollection(series);
   }

   private JFreeChart createChart( final XYDataset dataset )
   {
      return ChartFactory.createTimeSeriesChart(
      "Computing Test",
      "Seconds",
      "Value",
      dataset,
      false,
      false,
      false);
   }

   public static void main( final String[ ] args )
   {
      final String title = "Time Series Management";
      final TimeSeries_AWT demo = new TimeSeries_AWT( title );
      demo.pack( );
      RefineryUtilities.positionFrameRandomly( demo );
      demo.setVisible( true );
   }
}

保存上面的Java代码在TimeSeries_AWT.java文件，然后从命令提示符下编译并运行它，如下所示：

$javac TimeSeries_AWT.java
$java TImeSeries_AWT

如果一切顺利，它会编译并运行生成以下时序图：

创建JPEG图像

让我们重新编写上面的例子，在命令行生成JPEG图像。

import java.io.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.SeriesException;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.chart.ChartUtilities;

public class TimeSeriesChart
{
   public static void main( final String[ ] args )throws Exception
   {
      final TimeSeries series = new TimeSeries( "Random Data" );
      Second current = new Second();
      double value = 100.0;
      for ( int i = 0 ; i < 4000 ; i++ )
      {
         try
         {
            value = value + Math.random( ) - 0.5;
            series.add( current , new Double( value ) );
            current = ( Second ) current.next( );
         }
         catch ( SeriesException e )
         {
            System.err.println( "Error adding to series" );
         }
      }
      final XYDataset dataset=( XYDataset )new TimeSeriesCollection(series);
      JFreeChart timechart = ChartFactory.createTimeSeriesChart(
         "Computing Test",
         "Seconds",
         "Value",
         dataset,
         false,
         false,
         false);

      int width = 560; /* Width of the image */
      int height = 370; /* Height of the image */
      File timeChart = new File( "TimeChart.jpeg" );
      ChartUtilities.saveChartAsJPEG( timeChart, timechart, width, height );
   }
}

继续上面的Java代码保存在TimeSeriesChart.java文件中，然后从命令提示符下编译并运行它，如下所示：

$javac TimeSeriesChart.java
$java TimeSeriesChart

如果一切正常，它会编译并运行在当前的目录中创建JPEG图像文件TimeChart.jpeg文件。

JFreeChart文件接口 - JFreeChart教程

到目前为止，我们学习了如何使用静态数据的创建不同类型的JFreeChart API图表。但在生产环境中，数据被设置在文本文件的形式与一个预定义的格式，或者其直接来自数据库。

本章将解释如何我们可以看到从一个给定的位置给定的文本文件，一个简单的数据，然后使用JFreeChart创建图表。

业务数据

假设我们有一个文件名为mobile.txt，含有一个简单的逗号分隔不同的移动品牌和销售(每天单位)(，)：

Iphone 5S, 20
Samsung Grand, 20
MOTO G, 40  Nokia
Lumia, 10

基于文件图表生成

下面是基于文件 mobile.txt 提供的信息来创建一个饼图的代码：

import java.io.*;
import java.util.StringTokenizer;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_File
{
   public static void main( String[ ] args )throws Exception
   {
      String mobilebrands[ ] = {
        "IPhone 5s" ,
        "SamSung Grand" ,
        "MotoG" ,
        "Nokia Lumia"
      };

      InputStream in = new FileInputStream( new File( "C:/temp/test.txt" ) );
      BufferedReader reader = new BufferedReader(new InputStreamReader(in ) );
      StringBuilder out = new StringBuilder();
      String line;
      DefaultPieDataset dataset = new DefaultPieDataset();

      while (( line = reader.readLine() ) != null )
      {
         out.append( line );
      }
      StringTokenizer s = new StringTokenizer( out.toString(), "," );
      int i=0;
      while( s.hasMoreTokens( ) && ( mobilebrands [i] != null ) )
      {
         dataset.setValue(mobilebrands[i], Double.parseDouble( s.nextToken( ) ));
         i++;
      }
      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales",  // chart title
         dataset,         // data
         true,            // include legend
         true,
         false);

      int width = 560; /* Width of the image */
      int height = 370; /* Height of the image */
      File pieChart = new File( "pie_Chart.jpeg" );
      ChartUtilities.saveChartAsJPEG( pieChart, chart, width, height);
   }
}

让我们保存上面的Java代码在PieChart_File.java文件，然后从命令提示符下编译并运行它，如下所示：

$javac PieChart_File.java
$java PieChart_File

如果一切顺利，它会编译并运行以创建包含下面的图表名为PieChart.jpegthat JPEG图像文件。

JFreeChart数据库接口 - JFreeChart教程

本章介绍如何从数据库表中读取简单的数据，然后 JFreeChart 使用这些数据来创建图表。

业务数据

考虑到我们有如下的 MySQL 表 mobile_tbl(mobile_brand VARCHAR(100)NOT NULL，unit_sale INT NO NULL);

考虑这个表含有以下记录：

手机品牌 | 销售单位
IPhone5S | 20
Samsung Grand | 20
MotoG | 40
Nokia Lumia | 10

使用数据库数据生成图表

下面是创建一个基于MySQL数据库 mobile_tbl表 在数据库实例 TEST_DB 中提供的信息饼图的代码。根据需要，可以使用任何其他数据库。

import java.io.*;
import java.sql.*;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_DB
{
   public static void main( String[ ] args )throws Exception
   {
      String mobilebrands[] = {
      "IPhone 5s",
      "SamSung Grand",
      "MotoG",
      "Nokia Lumia"
      };

      /* Create MySQL Database Connection */
      Class.forName( "com.mysql.jdbc.Driver" );
      Connection connect = DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/jf_testdb" ,
      "root",
      "root123");

      Statement statement = connect.createStatement( );
      ResultSet resultSet = statement.executeQuery("select * from dataset_tb" );
      DefaultPieDataset dataset = new DefaultPieDataset( );
      while( resultSet.next( ) )
      {
         dataset.setValue(
         resultSet.getString( "brandname" ) ,
         Double.parseDouble( resultSet.getString( "datavalue" )));
      }
      JFreeChart chart = ChartFactory.createPieChart(
         "Mobile Sales",  // chart title
         dataset,         // data
         true,            // include legend
         true,
         false );

      int width = 560; /* Width of the image */
      int height = 370; /* Height of the image */
      File pieChart = new File( "Pie_Chart.jpeg" );
      ChartUtilities.saveChartAsJPEG( pieChart , chart , width , height );
   }
}

让我们保存上面的Java代码在PieChart_DB.java文件，然后从命令提示符下编译并运行它，如下所示：

$javac PieChart_DB.java
$java PieChart_DB

如果一切顺利，它会编译并运行并创建一个名为Pie_Chart.jpeghavingJPEG图像文件，如下图。