JFreeChart – 快速指南

JFreeChart – 快速指南


JFreeChart – 概述

图表是信息的图形表示。有各种可用的工具,可用于创建不同类型的图表。JFreeChart的项目成立于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 或以上
Memory 2GB 内存
Disk Space 无最低要求
Operating System Version Linux 或 Windows

安装 JFreeChart

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

JFreeChart 步骤

步骤 1:验证 Java 安装

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

Os 任务 命令
Windows 打开命令控制台 C:>java -version
Linux 打开命令终端 $java -version

一旦 Java 安装正确完成,那么您应该为两个操作系统获得以下输出 –

S.No 操作系统和描述
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 的基本目录位置。例如,

S.No 操作系统和描述
1

Windows

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

2

Linux

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

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

S.No 操作系统和描述
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

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

S.No 操作系统和描述
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 类级架构

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

S.No 单位和描述
1

File

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

2

Database

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

3

Create Dataset

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

4

General Dataset

这种类型的数据集主要用于饼图。

5

Category Dataset

这种类型的数据集用于条形图、折线图等。

6

Series Dataset

这种类型的数据集用于存储一系列数据和构建折线图。

7

Series Collection Dataset

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

8

Create Chart

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

9

Frame/Image

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

应用层架构

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

JFreeChart 应用程序级架构

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

JFreeChart – 引用的 API

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

图表工厂类

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

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

类构造函数

S.No 描述
1

ChartFactory()

ChartFactory 类的默认构造函数。

类方法

S.No 方法和说明
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 类

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

类构造函数

S.No 构造函数和描述
1

ChartFrame (java.lang.Frame String, JfreeChart chart)

它构建了一个框架。

2

Chart Frame (java.lang.Frame String, JfreeChart chart, boolean scrollpane)

它构建了一个框架。

类方法

S.No 方法和说明
1

getChartPanel()

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

图表面板类

从ChartPanel类org.jfree.chart包被用作用于显示的JFreeChart对象摆动GUI部件。

类构造函数

S.No 构造函数和描述
1

ChartPanel(JFreeChart chart)

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

2

ChartPanel(JFreeChart chart, boolean useBuffer)

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

3

ChartPanel(JFreeChart chart, boolean properties, boolean save, boolean print, boolean zoom, boolean tooltips)

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

类方法

S.No 方法和说明
1

setPreferredSize(java.awt.Dimension)

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

ChartUtilities 类

从CharUtilites类org.jfree.chart包提供的JFreeCharts包括用于转换成图表的图像文件格式,例如PNG,JPEG,以及创建HTML图像映射方法的实用方法的集合。

类构造函数

S.No 构造函数和描述
1

ChartUtilities()

这是一个类的默认构造函数

类方法

S.No 方法和说明
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.No 构造函数和描述
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.No 方法和说明
1

getXYPlot()

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

饼图类

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

类构造函数

S.No 构造函数和描述
1

PiePlot()

它创建了一个新的情节。

2

PiePlot(PieDataset dataset)

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

类方法

S.No 方法和说明
1

setStartAngle(double angle)

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

PiePlot3D 类

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

类构造函数

S.No 构造函数和描述
1

PiePlot3D()

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

2

PiePlot3D(PieDataset dataset)

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

类方法

S.No 方法和说明
1

setForegroundAlpha(float alpha)

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

2

setInteriorGap(double percent)

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

绘图方向类

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

字段摘要

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

类方法

S.No 方法和说明
1

isHorizontal()

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

2

isVertical()

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

XYPlot 类

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

类构造函数

S.No 构造函数和描述
1

XYPlot()

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

2

XYPlot(XYDataset 数据集、ValueAxis domainAxis、ValueAxis rangeAxis、XYItemRenderer渲染器)

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

类方法

S.No 方法和说明
1

setRenderer(XYItemRenderer渲染器)

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

数轴类

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

类构造函数

S.No 构造函数和描述
1

NumberAxis( )

这是 NumberAxis 的默认构造函数。

2

NumberAxis( java.lang.String label)

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

类方法

S.No 方法和说明
1

setLowerMargin(double margin)

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

2

setUpperMargin(double margin)

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

XYLineAndShapeRenderer 类

这是在org.jfree.chart.renderer.xy下可用的类,它负责用线连接数据点并在每个数据点绘制形状。此渲染器类旨在与XYPlot类一起使用。

类构造函数

S.No 构造函数和描述
1

XYLineAndShapeRenderer()

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

2

XYLineAndShapeRenderer(布尔线,布尔形状)

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

类方法

S.No 方法和说明
1

setSeriesPaint(int series, java.awt.Paint paint)

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

2

setSeriesStroke(int series, java.awt.Stroke stroke)

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

XYItemRenderer 通用数据集

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

饼数据集

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

DefaultPieDataset 类

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

类构造函数

S.No 构造函数和描述
1

DefaultPieDataset()

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

2

DefaultPieDataset(KeyedValues data)

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

类方法

S.No 方法和说明
1

setValue(java.lang.Comparable key, double value)

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

2

setValue(java.lang.Comparable key, java.lang.Number value)

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

系列异常类

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

默认类别数据集

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

类构造函数

S.No 构造函数和描述
1

DefaultCategoryDataset()

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

类方法

S.No 方法和说明
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)

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

4

setValue(java.lang.Number value, 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 值可以表示为空以表示缺失值。

类构造函数

S.No 构造函数和描述
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.No 方法和说明
1

add(double x, double y)

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

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

XY系列集合

XYSeriesCollection 类具有父类,如 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset 和 AbstractDataset。此类中的某些方法属于此类的父类。

类构造函数

S.No 构造函数和描述
1

XYSeriesCollection()

它构建了一个空数据集。

2

XYSeriesCollection(XYSeries xyseries)

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

类方法

S.No 方法和说明
1

addSeries(XYSeries series)

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

有关其余方法和字段,请参阅 JFreeChart API。

默认 XYZ 数据集

DefaultXYZDataset 类具有父类,如 AbstractIntervelDataset、AbstractXYDatset、AbstractSeriesDataset、AbstractDataset 和 AbstractXYZDataset。此类中的某些方法属于此类的父类。

类构造函数

S.No 构造函数和描述
1

DefaultXYZDataset()

它构建了一个空数据集。

类方法

S.No 方法和说明
1

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

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

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

JFreeCharts 中的时间序列

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

时间序列

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

类构造函数

S.No 构造函数和描述
1

TimeSeries(java.lang.Comparable name)

它创建新的空系列。

2

TimeSeries(java.lang.Comarable name, java.lang.String domain, java.lang.Strin range)

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

类方法

S.No 方法和说明
1

add(RegularTimePeriod period,double value)

此方法向系列添加新数据项。

有关其余方法和字段,请参阅 JFreeChart API。

时间序列集合

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

类构造函数

S.No 构造函数和描述
1

TimeSeriesCollection()

它构建一个空数据集,绑定到默认时区。

2

TimeSeriesCollection(时间序列系列)

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

3

TimeSeriesCollection(TimeSeries series, java.util.TimeZone zone)

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

4

TimeSeriesCollection (java.util.TimeZone zone)

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

类方法

S.No 方法和说明
1

addSeries(时间序列系列)

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

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

第二

此类代表特定日期中的一秒。这个类是不可变的,这是所有 RegularTimePeriod 子类的要求。

类构造函数

S.No 构造函数和描述
1

Second()

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

2

Second(java.util.Date time)

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

3

Second(java.util.Date time, java.util.TimeZone zone, java.util.Locale locale)

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

4

Second(int second, int minute, int hour, int day, int month, int year

它创造了新的一秒。

5

Second(int second, Minute minute)

它构建了一个新的秒。

类方法

S.No 方法和说明
1

getSecond()

它返回一分钟内的第二个。

2

next()

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

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

JFreeCharts 中的框架

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

应用框架

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

类构造函数

S.No 构造函数和描述
1

ApplicationFrame(java.lang.String title)

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

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

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

炼油厂公用事业

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

类方法

S.No 方法和说明
1

centerFrameOnScreen(java.awt.Window frame)

它将指定的帧定位在屏幕中间。

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

JFreeChart – 饼图

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

业务数据

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

S.No 移动品牌 销售额(单位/天)
1 IPhone 5S 20
2 三星大酒店 20
3 摩托 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从给定的业务数据集创建条形图

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

业务数据

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

Car 速度 用户评分 米拉奇 安全
Fiat 1.0 3.0 5.0 5.0
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 ); 
   }
}

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

$javac BarChar_AWT.java  
$java BarChart_AWT

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

JFree 图表

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 年开始的不同年份开设的学校数量的趋势。

给定数据如下 –

Year 学校数量
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 图表的示例。在这里,不同类别的人收集了不同的表现分数,如下所示 –

Firefox 类别(X) 得分(Y)
1.0 1.0
2.0 4.0
3.0 3.0
Chrome 类别(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 图表的代码。此代码可帮助您在任何基于 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 ); 
   }
}

让我们将上面的Java代码保存在XYLineChart_AWT.java文件中,然后根据提示的命令编译运行:

$javac XYLineChart_AWT.java  
$java XYLineChart_AWT 

如果一切正常,它将编译并运行以生成以下 XY Graph –

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

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

$javac XYLineChart_image.java  
$java XYLineChart_image

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

JFreeChart – 3D 饼图/条形图

3D 图表是那些以 3D 格式显示的图表。您可以使用这些图表来提供更好的显示和清晰的信息。3D 饼图与饼图相同,另外具有很好的 3D 效果。可以通过添加一些额外的代码来实现 3D 效果,这些代码将负责在饼图中创建 3D 效果。

3D 饼图

考虑以下示例,以在 3D 饼图的帮助下说明移动销售。以下是不同移动品牌及其销售额(每天单位)的列表。

S.No 移动品牌 销售额(单位/天)
1 IPhone 5S 20
2 三星大酒店 20
3 摩托 40
4 诺基亚 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 );   
   }
}

让我们将上面的 Java 代码保存在 PieChart3D.java 文件中,然后根据提示的命令编译并运行它 –

$javac PieChart3D.java  
$java PieChart3D 

如果一切正常,它将编译并运行以创建一个名为PieChart3D.jpeg的 JPEG 图像文件,该文件具有以下 3D 饼图 –

JFreeChart PieChart3D

3D 条形图

3D 条形图与条形图相同,但具有良好的 3D 效果。可以通过添加一些额外的代码来实现 3D 效果,这些代码将负责在条形图中创建 3D 效果。考虑以下示例,该示例借助 3D 条形图描述了各种汽车统计数据。以下是汽车品牌及其不同特征的列表,我们将使用条形图显示 –

Car 速度 用户评分 米拉奇 安全
FIAT 1.0 3.0 5.0 5.0
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 safety = "safety";        
      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 , safety );              
      
      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 , safety ); 
      
      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 , safety );                 
      
      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);
   }
}

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

$javac BarChart3D.java  
$java BarChart3

如果您的环境一切正常,它将编译并运行以创建具有以下 3D 条形图的 JPEG 图像文件BarChart3D.jpeg

JFreeChart 3D 条形图

JFreeChart – 气泡图

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

业务数据

让我们考虑不同的人以及他们的年龄、体重和工作能力。炒锅容量可以被视为小时数,在图表中绘制为气泡。

WEIGHT
AGE 30 40 50 60 70 80
10 4 工作
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 

如果一切正常,它将编译并运行以生成以下气泡图 –

JFreeChart 气泡图

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

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

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 

如果一切正常,它将编译并运行以生成以下时间序列图 –

JFreeChart 时间序列图表

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 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.jpeg的 JPEG 图像文件,其中包含以下图表。

JFreeChart 文件接口

JFreeChart – 数据库接口

本章解释了如何从数据库表中读取简单数据,然后使用 JFreeChart 创建您选择的图表。

业务数据

考虑我们有以下 MySQL 表 mobile_tbl(mobile_brand VARCHAR(100) NOT NULL, unit_sale INT NO NULL);

考虑这个表有以下记录 –

Mobile Brands 单位销售额
IPhone5S 20
Samsung Grand 20
MotoG 40
Nokia Lumia 10

使用数据库生成图表

以下是根据 MySQL 数据库中 test_db 中可用的 mobile_tbl 表中提供的信息创建饼图的代码。根据您的要求,您可以使用任何其他数据库。

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 mobile_data" );
      DefaultPieDataset dataset = new DefaultPieDataset( );
      
      while( resultSet.next( ) ) {
         dataset.setValue( 
         resultSet.getString( "mobile_brand" ) ,
         Double.parseDouble( resultSet.getString( "unit_sale" )));
      }
      
      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.jpeg的 JPEG 图像文件,具有以下图表。

JFreeChart 数据库接口

觉得文章有用?

点个广告表达一下你的爱意吧 !😁