JFreeChart - 快速指南


JFreeChart - 概述

图表是信息的图形表示。有多种可用工具可用于创建不同类型的图表。JFreeChart项目由 David Gilbert 于 2000 年2月创立。如今,它是 Java 开发人员中使用最广泛的图表库。

本教程将帮助您了解 JFreeChart 到底是什么、为什么需要它,以及在基于 Java 的应用程序中或独立创建不同类型的图表的各种方法。

什么是 JFreeChart?

JfreeChart是一个用Java开发的开源库。它可以在基于 Java 的应用程序中使用来创建各种图表。通过使用JFreeChart,我们可以创建所有主要类型的2D和3D图表,例如饼图、条形图、折线图、XY图和3D图表。

为什么选择 JFreeChart?

JFreeChart 是开源的并且 100% 免费,允许在商业应用程序中免费使用。我们在这里列出了更多支持您为什么应该使用 JFreeChart 的观点 -

  • 它带有记录良好的 API,这使得它非常容易理解。

  • 它支持多种图表类型,例如饼图、折线图、条形图、面积图和 3D 图表。

  • JFreeChart 易于扩展,可用于客户端和服务器端应用程序。

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

  • 它允许对图表进行广泛的定制。

考虑这样一种情况:您正在开发应用程序,需要以图表的形式显示数据,并且数据本身是动态填充的。在这种情况下,使用 JFreeChart 编程以图表的形式显示数据非常简单。

JFreeChart - 安装

JFreeChart 因其高效的图表创建和用户友好的安装设置而广受欢迎。本章介绍在 Windows 和 Linux 上设置 JFreeChart 的过程。安装 JFreeChart 时需要用户管理。

系统要求

JDK 1.5或以上
记忆 2GB内存
磁盘空间 无最低要求
操作系统版本 Linux 或 Windows

安装 JFreeChart

要安装 JFreeChart,有以下三个步骤:

JFreeChart 步骤

第 1 步:验证 Java 安装

要验证 Java 安装,请打开控制台并执行以下 java 命令 -

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

正确完成 Java 安装后,您应该获得两个操作系统的以下输出 -

序列号 操作系统和描述
1

Windows

Java 版本“1.7.0_60”Java (TM) SE 运行时环境(版本 1.7.0_60-b19) Java HotSpot(TM) 64 位服务器 VM(版本 24.60-b09,混合模式)

2

Linux

java 版本“1.7.0_25”OpenJDK 运行时环境 (rhel2.3.10.4.el6_4-x86_64) OpenJDK 64 位服务器 VM(内部版本 23.7-b01,混合模式)

如果您没有安装 Java,请从链接安装 Java 软件开发工具包 (SDK) -

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

我们假设您在继续本教程之前已经安装了 Java 1.7.0_60 版本。

第二步:设置JAVA环境

设置JAVA_HOME环境变量以指向计算机上安装 Java 的基本目录位置。例如,

序列号 操作系统和描述
1

Windows

将环境变量 JAVA_HOME 设置为 C:\ProgramFiles\java\jdk1.7.0_60

2

Linux

导出 JAVA_HOME=/usr/local/java-current

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

序列号 操作系统和描述
1

Windows

追加字符串;C:\Program Files\Java\jdk1.7.0_60\bin 到系统变量 PATH 的末尾。

2

Linux

导出路径=$PATH:$JAVA_HOME/bin/

如上所述,根据提示的命令验证命令java -version 。

第 3 步:安装 JFreeChart

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

自由图表

将 jfreechart-1.0.18.jar 和 jcommon-1.0.22.jar 文件的完整路径添加到 CLASSPATH 中,如下所示 -

序列号 操作系统和描述
1

Windows

将字符串“C:\ jfreechart-1.0.18\lib\ jfreechart-1.0.18.jar”和“C:\ jfreechart-1.0.18\lib\ jcommon-1.0.22.jar”附加到用户的末尾变量类路径

2

Linux

导出 CLASSPATH=$CLASSPATH: /usr/share/jfreechart1.0.18/lib/jfreechart-1.0.18.jar: /usr/share/jfreechart-1.0.18/lib/jcommon1.0.22.jar

注意- 为了与 MySql 数据库通信,您还需要将类路径设置为mysql-connector-java-5.0.8-bin.jar

JFreeChart - 架构

本章介绍了 JFreeChart 的基本类级别和应用程序级别体系结构,让您了解 JFreeChart 如何与不同的类交互以及它如何适合基于 Java 的应用程序。

类级架构

类级架构解释了库中的各个类如何相互交互以创建各种类型的图表。

JFreeChart 类级架构

以下是上述框图中使用的单元的详细信息 -

序列号 单位及说明
1

文件

具有用于在文件中创建数据集的用户输入的源。

2

数据库

具有用于在数据库中创建数据集的用户输入的源。

3

创建数据集

接受数据集并将数据集存储到数据集对象中。

4

通用数据集

此类数据集主要用于饼图。

5

类别数据集

此类数据集用于条形图、折线图等。

6

系列数据集

此类数据集用于存储一系列数据并构建折线图。

7

系列集合数据集

不同类别的系列数据集被添加到系列集合数据集中。这种类型的数据集用于 XYLine 图表。

8

创建图表

这是创建最终图表所执行的方法。

9

帧/图像

图表显示在 Swing Frame 上或创建图像。

应用层架构

应用程序级架构解释了 JFreeChart 库在 Java 应用程序中的位置。

JFreeChart 应用程序级架构

客户端程序接收用户数据,然后根据需求使用标准 Java 和 JFreeChart API 生成框架形式的输出,该输出可以直接在应用程序内部显示,也可以以 JPEG 或 PNG 等图像格式独立显示。

JFreeChart - 引用的 API

在本章中,我们将讨论 JFreeChart 库中的一些重要的包、类和方法。这些包、类和方法是使用 JFreeChart 库创建各种图表时最常用的。

图表工厂类

ChartFactory是org.jfree.chart包下的一个抽象类。它提供了一系列用于生成标准图表的实用方法。

以下是一些重要方法的列表 -

类构造函数

序列号 描述
1

图表工厂()

ChartFactory 类的默认构造函数。

类方法

序列号 方法与说明
1

createPieChart(java.lang.String 标题、PieDataset 数据集、布尔图例、布尔工具提示、布尔 url)

此方法使用默认设置创建饼图。它返回 JfreeChart 类型对象。

2

createPieChart3D(java.lang.String 标题、PieDataset 数据集、布尔图例、布尔工具提示、布尔 url

此方法使用指定的数据集创建 3D 饼图。

3

createBarChart(java.lang.String title, java.lang.String CategoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset 数据集, PlotOrientation 方向, 布尔图例, 布尔工具提示, 布尔 url)

参数 java.lang.StringcategoryAxisLabel 是放置在 X 轴上的值的标签。参数 java.lang.String valueAxisLabel 是放置在 Y 轴上的值的标签。

此方法创建条形图。

4

createBarChart3D(java.lang.String标题,java.lang.StringcategoryAxisLabel,java.lang.StringvalueAxisLabel,CategoryDataset数据集,PlotOrientation方向,布尔图例,布尔工具提示,布尔url)

此方法创建具有 3D 效果的条形图。它返回 JfreeChart 类型对象。

5

createLineChart(java.lang.String title, java.lang.String CategoryAxisLabel, java.lang.String valueAxisLabel, CategoryDataset 数据集, PlotOrientation 方向, 布尔图例, 布尔工具提示, 布尔 url)

此方法使用默认设置创建折线图。

6

createLineChart3D(java.lang.String标题,java.lang.StringcategoryAxisLabel,java.lang.StringvalueAxisLabel,CategoryDataset数据集,PlotOrientation方向,布尔图例,布尔工具提示,布尔url)

此方法创建具有 3D 效果的折线图。

7

createXYLineChart(java.lang.String title, java.lang.String xAxisLabel, java.lang.String yAxisLabel, XYDataset 数据集, PlotOrientation 方向, 布尔图例, 布尔工具提示, 布尔 url)

此方法使用默认设置基于 XYDataset 创建折线图。

图表框架类

org.jfree.chart 包下的 ChartFrame 类提供了所有与框架相关的功能和实用程序。ChartFrame 类继承了父类(例如 Frame、Window、Container 和 Component 类)的功能。

类构造函数

序列号 构造函数和描述
1

ChartFrame(java.lang.Frame字符串,JfreeChart图表)

它构建了一个框架。

2

图表框架(java.lang.Frame 字符串、JfreeChart 图表、布尔滚动窗格)

它构建了一个框架。

类方法

序列号 方法及说明
1

获取图表面板()

此方法返回框架的图表面板。

图表面板类

org.jfree.chart包中的 ChartPanel 类用作显示 JfreeChart 对象的 swing GUI 组件。

类构造函数

序列号 构造函数和描述
1

ChartPanel(JFreeChart图表)

此构造函数构造一个显示指定图表的面板。

2

ChartPanel(JFreeChart图表,布尔useBuffer)

此构造函数构造一个包含图表的面板。

3

ChartPanel(JFreeChart图表,布尔属性,布尔保存,布尔打印,布尔缩放,布尔工具提示)

此构造函数构造一个 JFreeChart 面板。

类方法

序列号 方法及说明
1

setPreferredSize(java.awt.Dimension)

此方法用于使用 java.awt 设置帧大小。Dimension 类对象作为参数。该方法取自javax.swing.JComponent。

图表实用程序类

org.jfree.chart包中的 CharUtilites 类提供了 JFreeCharts 实用方法的集合,包括将图表转换为图像文件格式(如 PNG、JPEG)以及创建 HTML 图像映射的方法。

类构造函数

序列号 构造函数和描述
1

图表实用程序()

这是类的默认构造函数

类方法

序列号 方法及说明
1

saveChartAsPNG(java.io.File 文件,JfreeChart 图表,int 宽度,int 高度)

该方法将图表转换并保存为PNG格式的指定文件。

2

saveChartAsJPEG(java.io.File 文件,JfreeChart 图表,int 宽度,int 高度)

该方法将图表转换为JPEG格式并保存到指定文件中。

JFreeChart 类

JFreeChart类是org.jfree.chart包下的核心类。此类提供 JFreeChart 方法来创建条形图、折线图、饼图和包括时间序列数据的 xy 图。

类构造函数

序列号 构造函数和描述
1

JfreeChart(绘图)

此构造函数根据提供的绘图创建一个新图表。

2

JfreeChart(java.lang.String标题,java.awt.Font titleFont,绘图,布尔createLegend)

此构造函数创建一个具有给定标题和绘图的新图表。

3

JfreeChart(java.lang.String 标题, 绘图)

此构造函数创建一个具有给定标题和绘图的新图表。

类方法

序列号 方法及说明
1

获取XY图()

此方法将绘图返回为XYPlot。使用 XYPolt,我们可以对 xy 图表进行一些实用操作。

饼图类

该类是org.jfree.chart.plot包的一部分,并从同一包扩展 Plot 类。此类提供了创建饼图的方法。

类构造函数

序列号 构造函数和描述
1

饼图()

它创造了一个新的Plotly。

2

PiePlot(PieDataset数据集)

它创建一个绘图,为指定的数据集绘制饼图。

类方法

序列号 方法及说明
1

setStartAngle(双角)

此方法设置起始角度并向所有注册的侦听器发送 PlotChangeEvent

PiePlot3D 类

PiePlot3D 类是同一包下 PiePlot 类的子类。因此,该类具有与 PiePlot 类相同的功能,只不过它用于创建 3D 绘图。

类构造函数

序列号 构造函数和描述
1

PiePlot3D()

此构造函数创建一个没有数据集的新实例。

2

PiePlot3D(PieDataset数据集)

该构造函数使用指定的数据集创建具有三维效果的饼图。

类方法

序列号 方法及说明
1

setForegroundAlpha(浮动阿尔法)

它设置绘图的 alpha 透明度并向所有注册的侦听器发送 PlotChangeEvent。这是取自父 Plot 类之一。

2

setInteriorGap(双百分比)

它设置内部间隙并向所有注册的侦听器发送 PlotChangeEvent。这控制饼图边缘和绘图区域本身(即出现部分标签的区域)之间的空间。该方法取自父类PiePlot。

Plotly方向类

这是org.jfree.chart.plot包中提供的序列化类,用于显示 2D 绘图的方向。方向可以是垂直的水平的。它设置 Y 轴的方向。传统绘图具有垂直 Y 轴。

现场总结

序列号 类型 字段和描述
1 Plotly取向 HORIZONTAL对于范围轴(Y 轴)为水平的绘图。
2 Plotly取向 VERTICAL对于范围轴(Y 轴)垂直的绘图。这是默认方向。

类方法

序列号 方法及说明
1

isHorizo​​ntal()

如果此方向为 HORIZONTAL,则此方法返回 true,否则返回 false。

2

是垂直的()

如果此方向为 VERTICAL,则此方法返回 true,否则返回 false。

XY图类

这是org.jfree.chart.plot包中提供的通用类,用于以 (x,y) 对的形式绘制数据。该图可以使用来自实现 XYDataSet 接口的任何其他类的数据。XYPlot 使用 XYItemRenderer 绘制绘图上的每个点。

类构造函数

序列号 构造函数和描述
1

XY 图 ()

该承包商创建了一个新的 XYPlot 实例,没有数据集、轴和渲染器。

2

XYPlot(XYDataset数据集、ValueAxisdomainAxisValueAxisrangeAxisXYItemRenderer渲染器)

此构造函数使用指定的数据集、轴和渲染器创建一个新绘图。

类方法

序列号 方法及说明
1

setRenderer(XYItemRenderer渲染器)

此方法设置主数据集的渲染器并向所有注册的侦听器发送更改事件。

数轴类

该类在org.jfree.chart.axis包中可用,它可以访问任何轴的数值数据。当我们将任何轴的范围设置为默认值时,它都会根据数据的范围进行拟合。但是使用 NumberAxis 类我们可以设置域轴和范围轴的下边距和上边距。

类构造函数

序列号 构造函数和描述
1

数轴( )

这是 NumberAxis 的默认构造函数。

2

NumberAxis( java.lang.String 标签)

NumberAxis 构造函数在必要时使用默认值。

类方法

序列号 方法及说明
1

setLowerMargin(双边距)

它设置轴的下边距(作为轴范围的百分比)并向所有注册的侦听器发送AxisChangeEvent 。该方法取自 ValueAxis 类的父类。

2

setUpperMargin(双边距)

它设置轴的上边距(作为轴范围的百分比)并向所有注册的侦听器发送AxisChangeEvent 。ValueAxis 类中也存在此方法。

XYLineAndShapeRenderer 类

这是org.jfree.chart.renderer.xy包下提供的类,它负责用线条连接数据点并在每个数据点绘制形状。该渲染器类设计用于与XYPlot类一起使用。

类构造函数

序列号 构造函数及描述
1

XYLineAndShapeRenderer()

它创建一个新的渲染器,线条和形状都可见。

2

XYLineAndShapeRenderer(布尔线、布尔形状)

它创建一个具有特定属性的新渲染器。

类方法

序列号 方法及说明
1

setSeriesPaint(int 系列, java.awt.Paint 油漆)

此方法设置用于系列的绘制并将RendererChangeEvent发送到所有注册的侦听器。该方法取自 JFreeChart API 中渲染器包的 AbstratRenderer 抽象类。

2

setSeriesStroke(int 系列, java.awt.Stroke 笔划)

此方法设置用于系列的笔划,并将RendererChangeEvent发送到所有注册的侦听器。该方法取自 AbstratRenderer 抽象类,它是该包的超类。

XYItemRenderer 通用数据集

这是一个用于在 XY 图上呈现单个 (x, y) 项的格式的接口。该包是org.Jfree.data.general,它具有用于定义不同类型的数据集来构建图表的类和接口。

饼图数据集

这是一个用作通用数据集的接口,其中值与键相关联。顾名思义,您可以使用此数据集为饼图提供数据。该接口扩展了 KeyedValues 和 DataSet 接口。该接口使用的所有方法均取自 KeyedValues、Values 和 Dataset 接口。

默认PieDataset类

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

类构造函数

序列号 构造函数和描述
1

默认Pie数据集()

此构造函数创建一个新的数据集,最初为空。

2

DefaultPieDataset(KeyedValues 数据)

它通过从KeyedValues实例复制数据来创建新的数据集。

类方法

序列号 方法及说明
1

setValue(java.lang.Comparable 键,双精度值)

它设置键的数据值并将DatasetChangeEvent发送到所有注册的侦听器。

2

setValue(java.lang.Comparable 键,java.lang.Number 值)

它设置键的数据值并将DatasetChangeEvent发送到所有注册的侦听器。

SeriesException 类

这是一个异常类。它引发了数据集中数据时间序列中发生的异常。出现重复或无效数据时会引发异常。时间序列不得重复应用,且格式必须有效。

默认类别数据集

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

类构造函数

序列号 构造函数和描述
1

默认类别数据集()

此构造函数创建新的空数据集。

类方法

序列号 方法及说明
1

addValue(双精度值, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法使用可比较的键向表中添加值。

2

addValue(java.lang.Number 值, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法向表中添加一个值。

3

setValue(双精度值, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法添加或更新表中的值并将DatasetChangeEvent发送到所有注册的侦听器。

4

setValue(java.lang.Number 值, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

此方法添加或更新表中的值并将DatasetChangeEvent发送到所有注册的侦听器。

有关各种其他方法和字段的更多信息,请参阅 JFreeChart API。

系列数据集

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

XY数据集

这是一个接口,通过它可以访问 (x,y) 项形式的数据。顾名思义,您可以使用此数据集来提供 XY 图表。该接口中的一些方法取自SeriesDateset接口。

XYZ数据集

这是一个接口,通过它可以访问 (x,y,z) 项形式的数据。顾名思义,您可以使用此数据集来提供 XYZ 图表。该接口中的一些方法取自SeriesDateset。

XY系列

这是一个类,表示 (x, y) 形式的零个或多个数据项的序列。默认情况下,系列中的项目按 x 值升序排序,并且允许重复的 x 值。排序和重复默认值都可以在构造函数中更改。Y 值可以表示为 null 以表示缺失值。

类构造函数

序列号 构造函数和描述
1

XYSeries(java.lang.Comparable key)

此构造函数创建一个新的空系列。

2

XYSeries(java.lang.Comparable key, 布尔自动排序)

它构造一个新的空系列,并根据请求设置自动排序标志,并且允许重复值。

3

XYSeries(java.lang.Comparable key,布尔自动排序,布尔allowDuplicateXValues)

它构造一个不包含数据的新 xy 系列。

类方法

序列号 方法及说明
1

添加(双 x,双 y)

此方法将数据项添加到系列中。

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

XY系列系列

XYSeriesCollection 类具有 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset 和 AbstractDataset 等父类。该类中的一些方法属于该类的父类。

类构造函数

序列号 构造函数和描述
1

XYSeriesCollection()

它构造一个空数据集。

2

XY系列集合(XYSeries xyseries)

它构建一个数据集并用单个系列填充它。

类方法

序列号 方法及说明
1

addSeries(XYSeries系列)

此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有注册的侦听器。

请参阅 JFreeChart API 了解其余方法和字段。

默认 XYZ 数据集

DefaultXYZDataset 类具有 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset、AbstractDataset 和 AbstractXYZDataset 等父类。该类中的一些方法属于该类的父类。

类构造函数

序列号 构造函数和描述
1

默认XYZ数据集()

它构造一个空数据集。

类方法

序列号 方法及说明
1

addSeries(java.lang.Comparable seriesKey, double[ ][ ] data )

此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有注册的侦听器。

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

JFreeCharts 中的时间序列

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

时间序列

此类表示周期值形式的数据项序列,其中周期是 RegularTimePeriod 抽象类的一些实例,例如 Time、Day、Hour、Minute 和 Second 类。

类构造函数

序列号 构造函数和描述
1

TimeSeries(java.lang.Comparable name)

它创建新的空系列。

2

TimeSeries(java.lang.Comarable 名称、java.lang.String 域、java.lang.Strin 范围)

它创建不包含数据的新时间序列。

类方法

序列号 方法及说明
1

添加(RegularTimePeriod 周期,双精度值)

此方法将新数据项添加到系列中。

请参阅 JFreeChart API 了解其余方法和字段。

时间序列集合

这是一个用作时间序列对象集合的类。该类实现 XYDataset 接口,并扩展 IntervelXYDataset 接口。这使得收集系列数据对象变得很方便。

类构造函数

序列号 构造函数和描述
1

时间序列集合()

它构建一个与默认时区相关的空数据集。

2

TimeSeriesCollection(TimeSeries系列)

它构建一个包含单个系列(可以添加更多)的数据集,并与默认时区相关。

3

TimeSeriesCollection(TimeSeries系列,java.util.TimeZone 区域)

它构建一个包含与特定时区相关的单个系列(可以添加更多系列)的数据集。

4

TimeSeriesCollection(java.util.TimeZone 区域)

它构建一个与特定时区相关的空数据集。

类方法

序列号 方法及说明
1

addSeries(时间序列系列)

此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有注册的侦听器。

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

第二

该类代表特定一天中的一秒钟。该类是不可变的,这是所有 RegularTimePeriod 子类的要求。

类构造函数

序列号 构造函数和描述
1

第二()

它根据系统日期/时间构造一个新的 Second。

2

第二(java.util.日期时间)

它根据指定的日期/时间和默认时区构造一个新实例。

3

第二(java.util.Date时间,java.util.TimeZone区域,java.util.Locale区域设置)

它根据提供的时间和时区创建新的秒。

4

Second(int 秒、int 分钟、int 小时、int 日、int 月、int 年

它创造了新的一秒。

5

秒(int 秒,分钟 分钟)

它构建了一个新的第二。

类方法

序列号 方法及说明
1

获取第二个()

它返回一分钟内的秒数。

2

下一个()

它返回当前秒之后的第二个。

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

JFreeCharts 中的框架

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

应用框架

这是用于创建简单应用程序主框架的基类。该框架侦听窗口关闭事件,并通过关闭 JVM 进行响应。这对于小型演示应用程序来说很好。对于企业应用程序,您需要使用更强大的东西。该类中的主要核心方法取自 Component、Container、Window、Frame 和 Jframe 类。

类构造函数

序列号 构造函数及描述
1

ApplicationFrame(java.lang.String 标题)

它创建一个带有字符串标题的应用程序框架。

此类有助于创建 AWT 框架。这就是我们在本教程示例中使用此类作为超类的原因。

从父类中获取的方法用于打开框架、关闭框架、更改大小、更改背景或前景色以及侦听器。

炼油厂公用事业

这是与用户界面相关的实用方法的类集合。

类方法

序列号 方法及说明
1

centerFrameOnScreen(java.awt.窗口框架)

它将指定的框架放置在屏幕中间。

教程示例中使用了上述方法。有关其余方法和字段,请参阅 JFreeChart API。

JFreeChart - 饼图

在饼图中,每个扇形的弧长与其代表的数量成正比。本章演示如何使用 JFreeChart从给定的业务数据集创建饼图。

业务数据

以下示例借助饼图描述了移动销售。以下是不同移动品牌及其销量(每天的数量)的列表。

序列号 手机品牌 销售额(每天单位)
1 IPhone 5S 20
2 三星大酒店 20
3 摩托G 40
4 诺基亚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 ); 
   }
}

让我们将上述 Java 代码保留在PieChart_AWT.java文件中,然后根据提示的命令编译并运行它:

$javac PieChart_AWT.java  
$java PieChart_AWT

如果一切正常,它将编译并运行以生成以下饼图 -

JFreeChart 饼图

如果您不需要将图表嵌入到任何应用程序中,则可以在命令提示符下创建图表图像。JFreeChart 允许您以 JPG 或 PNG 格式保存图表图像。

JPEG 图像创建

让我们重写上面的示例以从命令行生成 JPEG 图像。以下是 JFreeChart 库提供的两个 API,您可以根据需要使用它们生成 PNG 或 JPEG 图像。

  • saveChartAsPNG() - 以 PNG 格式保存图像的 API。

  • saveChartAsJPEG() - 以 JPEG 格式保存图像的 API。

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 );
   }
}

让我们将上述 Java 代码保留在PieChart.java文件中,然后根据提示的命令编译并运行它:

$javac PieChart.java  
$java PieChart

如果一切正常,它将编译并运行以在当前目录中创建一个名为PieChart.jpeg的 JPEG 图像文件。

JFreeChart - 条形图

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

条形图使用不同方向(水平或垂直)的条形来显示不同类别的比较。图表的一个轴(域轴)显示正在比较的特定域,另一轴(范围轴)表示离散值。

业务数据

以下示例借助条形图描述了各种汽车统计数据。以下是汽车品牌及其不同特征的列表,我们将使用条形图显示 -

速度 用户评分 米拉格 安全
菲亚特 1.0 3.0 5.0 5.0
奥迪 5.0 6.0 10.0 4.0
福特 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 ); 
   }
}

让我们将上述 Java 代码保留在BarChart_AWT.java文件中,然后根据提示的命令编译并运行它:

$javac BarChar_AWT.java  
$java BarChart_AWT

如果一切正常,它将编译并运行以生成以下条形图 -

J免费图表

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 );
   }
}

让我们将上述 Java 代码保留在 BarChart.java 文件中,然后根据提示的命令编译并运行它:

$javac BarChart.java  
$java BarChart 

如果一切正常,它将编译并运行以在当前目录中创建一个名为BarChart.jpeg的 JPEG 图像文件。

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 );
   }
}

让我们将上述 Java 代码保留在LineChart_AWT.java文件中,然后根据提示的命令编译并运行它:

$javac LineChart_AWT.java  
$java LineChart_AWT 

如果一切正常,它将编译并运行以生成以下线图 -

JFreeChart 折线图

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);
   }
}

让我们将上述 Java 代码保留在LineChart.java文件中,然后根据提示的命令编译并运行它:

$javac LineChart.java  
$java LineChart

如果一切正常,它将编译并执行以在当前目录中创建一个名为LineChart.jpeg的 JPEG 图像文件。

JFreeChart - XY 图表

XY 图表(散点图)基于由 X 和 Y 值列表组成的一个数据系列。每个值对 (X,Y) 都是坐标系中的一个点。此处,一个值确定水平 (X) 位置,另一个值确定垂直 (Y) 位置。本章演示如何使用 JFreeChart从给定的业务数据集创建XY 图表。

业务数据

考虑一个示例,我们想要为所有主要浏览器创建 XY 图表。在这里,不同类别的人收集了不同的表现分数,如下所示 -

火狐浏览器 类别(X) 分数(Y)
1.0 1.0
2.0 4.0
3.0 3.0
铬合金 类别(X) 分数(Y)
1.0 4.0
2.0 5.0
3.0 6.0
IE 类别(X) 分数(Y)
3.0 4.0
4.0 5.0
5.0 4.0

基于AWT的应用程序

以下是根据上述给定信息创建 XY 图表的代码。此代码可帮助您将 XY 图表嵌入到