JFreeChart - 快速指南
JFreeChart - Overview
图表是信息的图形表示。 有各种可用的工具,可用于创建不同类型的图表。 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 - Installation
JFreeChart因其高效的图表创建和用户友好的安装设置而广受欢迎。 本章介绍在Windows和Linux上设置JFreeChart的过程。 安装JFreeChart时需要用户管理。
系统需求 (System Requirements)
JDK | 1.5或以上 |
Memory | 2GB RAM |
Disk Space | 没有最低要求 |
Operating System Version | Linux或Windows |
安装JFreeChart
要安装JFreeChart,有以下三个步骤即...
第1步:验证Java安装
要验证Java安装,请打开控制台并执行以下java命令 -
口 | 任务 | 命令 |
---|---|---|
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版本,然后再继续本教程。
第2步:设置JAVA环境
将JAVA_HOME环境变量设置为指向计算机上安装Java的基本目录位置。 例如,
S.No | Os&Description |
---|---|
1 | Windows 将环境变量JAVA_HOME设置为C:\ProgramFiles\java\jdk1.7.0_60 |
2 | Linux export JAVA_HOME =/usr/local/java-current |
将Java编译器位置附加到系统路径。
S.No | 操作系统和描述 |
---|---|
1 | Windows 附加字符串; C:\Program Files\Java\jdk1.7.0_60\bin到系统变量PATH的末尾。 |
2 | Linux export PATH = $ 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,如下所示 -
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”附加到用户的末尾变量CLASSPATH |
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 |
Note - 为了与MySql数据库通信,您还需要将类路径设置为mysql-connector-java-5.0.8-bin.jar 。
JFreeChart - Architecture
本章介绍了JFreeChart的基本类级别和应用程序级别体系结构,以便您了解JFreeChart如何与不同的类进行交互以及它如何适合基于Java的应用程序。
类级架构
类级体系结构解释了库中的各种类如何相互交互以创建各种类型的图表。
以下是上述框图中使用的单位的详细信息 -
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应用程序中的位置。
客户端程序接收用户数据,然后根据需求使用标准Java和JFreeChart API,以帧的形式生成输出,可以直接在应用程序内部显示,也可以以JPEG或PNG等图像格式独立显示。
JFreeChart - Referenced APIs
在本章中,我们将讨论JFreeChart库中的一些重要包,类和方法。 使用JFreeChart库创建各种图表时,最常使用这些包,类和方法。
ChartFactory类
ChartFactory是org.jfree.chart包下的抽象类。 它提供了一组用于生成标准图表的实用方法。
以下是一些重要方法的列表 -
类构造函数 (Class Constructor)
S.No | 描述 |
---|---|
1 | ChartFactory() ChartFactory类的默认构造函数。 |
类方法 (Class Methods)
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类)继承功能。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | ChartFrame (java.lang.Frame String, JfreeChart chart) 它构造了一个框架。 |
2 | Chart Frame (java.lang.Frame String, JfreeChart chart, boolean scrollpane) 它构造了一个框架。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | getChartPanel() 此方法返回框架的图表面板。 |
ChartPanel类
org.jfree.chart包中的ChartPanel类用作显示JfreeChart对象的swing GUI组件。
类构造函数 (Class Constructor)
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面板。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setPreferredSize(java.awt.Dimension) 此方法用于使用java.awt设置帧大小。 Dimension类对象作为参数。 此方法取自javax.swing.JComponent。 |
ChartUtilities Class
org.jfree.chart包中的CharUtilites类提供了一组JFreeCharts实用程序方法,包括将图表转换为图像文件格式(如PNG,JPEG和创建HTML图像映射)的方法。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | ChartUtilities() 这是类的默认构造函数 |
类方法 (Class Method)
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图。
类构造函数 (Class Constructor)
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) 此构造函数使用给定的标题和绘图创建新图表。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | getXYPlot() 此方法将绘图图表作为XYPlot返回。 使用XYPolt,我们可以在xy图表上执行一些实用程序操作。 |
PiePlot类
该类是org.jfree.chart.plot包的一部分,并从同一个包中扩展Plot类。 此类提供了创建饼图的方法。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | PiePlot() 它创造了一个新的情节。 |
2 | PiePlot(PieDataset dataset) 它会创建一个绘制指定数据集的饼图的图。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setStartAngle(double angle) 此方法设置起始角度并将PlotChangeEvent发送给所有已注册的侦听器 |
PiePlot3D类
PiePlot3D类是同一个包下的PiePlot类的子类。 因此,此类具有与PiePlot类相同的功能,但它用于创建3D绘图。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | PiePlot3D() 此构造函数创建一个没有数据集的新实例。 |
2 | PiePlot3D(PieDataset dataset) 此构造函数使用指定的数据集创建具有三维效果的饼图。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setForegroundAlpha(float alpha) 它为绘图设置alpha透明度,并向所有已注册的侦听器发送PlotChangeEvent。 这是从一个父Plot类中获取的。 |
2 | setInteriorGap(double percent) 它设置内部间隙并向所有已注册的侦听器发送PlotChangeEvent。 这将控制饼图边缘与绘图区域本身之间的空间(即,节标签出现的区域)。 此方法取自父类PiePlot。 |
PlotOrientation类
这是org.jfree.chart.plot包中提供的序列化类,它用于显示2D绘图的方向。 方向可以是vertical或horizontal 。 它设置Y轴的方向。 传统图具有垂直Y轴。
现场总结
S.No | 类型 | 领域和描述 |
---|---|---|
1 | PlotOrientation | HORIZONTAL对于范围轴(Y轴)水平的绘图。 |
2 | PlotOrientation | VERTICAL对于范围轴(Y轴)垂直的图。 这是默认方向。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | isHorizontal() 如果此方向为HORIZONTAL,则此方法返回true,否则返回false。 |
2 | isVertical() 如果此方向为VERTICAL,则此方法返回true,否则返回false。 |
XYPlot类
这是org.jfree.chart.plot包中的通用类,它用于以(x,y)对形式绘制数据。 此图可以使用来自实现XYDataSet接口的任何其他类的数据。 XYPlot使用XYItemRenderer绘制绘图上的每个点。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | XYPlot() 此承包商创建一个没有数据集,没有轴和渲染器的新XYPlot实例。 |
2 | XYPlot(XYDataset dataset, ValueAxis domainAxis, ValueAxis rangeAxis, XYItemRenderer渲染器) 此构造函数使用指定的数据集,轴和渲染器创建新绘图。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setRenderer(XYItemRenderer渲染器) 此方法设置主数据集的渲染器,并向所有已注册的侦听器发送更改事件。 |
NumberAxis类
该类在org.jfree.chart.axis包中提供,它可以访问任何轴的数值数据。 当我们将任何轴的范围设置为默认值时,它会根据数据范围进行拟合。 但是使用NumberAxis,类我们可以设置域和范围轴的下边距和上边距。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | NumberAxis( ) 这是NumberAxis的默认构造函数。 |
2 | NumberAxis( java.lang.String label) 构造函数NumberAxis在必要时使用默认值。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setLowerMargin(double margin) 它设置轴的下边距(作为轴范围的百分比),并将AxisChangeEvent发送给所有已注册的侦听器。 此方法取自ValueAxis类的父类。 |
2 | setUpperMargin(double margin) 它设置轴的上边距(作为轴范围的百分比),并将AxisChangeEvent发送给所有已注册的侦听器。 此方法也存在于ValueAxis类中。 |
XYLineAndShapeRenderer类
这是org.jfree.chart.renderer.xy包下的类,它负责使用行连接数据点并在每个数据点绘制形状。 此渲染器类设计用于XYPlot类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | XYLineAndShapeRenderer() 它创建了一个可见的线条和形状的新渲染器。 |
2 | XYLineAndShapeRenderer (布尔线,布尔形状) 它创建一个具有特定属性的新渲染器。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setSeriesPaint(int series, java.awt.Paint paint) 此方法设置用于系列的绘制,并将RendererChangeEvent发送到所有已注册的侦听器。 此方法取自JFreeChart API中renderer包中的AbstratRenderer抽象类。 |
2 | setSeriesStroke(int series, java.awt.Stroke stroke) 此方法设置用于系列的笔划,并将RendererChangeEvent发送到所有已注册的侦听器。 此方法取自AbstratRenderer抽象类,它是此包的超类。 |
XYItemRenderer常规数据集
这是一个用于在XYPlot上呈现单个(x,y)项的格式的界面。 该包是org.Jfree.data.general ,它具有类和接口,用于定义不同类型的数据集以构建图表。
PieDataset (PieDataset)
这是一个用作通用数据集的接口,其中值与键相关联。 顾名思义,您可以使用此数据集为饼图提供数据。 此接口扩展了KeyedValues和DataSet接口。 用于此接口的所有方法都取自KeyedValues,Values和Dataset接口。
DefaultPieDataset类
这是PieDataset接口的Default实现类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | DefaultPieDataset() 此构造函数创建一个新数据集,最初为空。 |
2 | DefaultPieDataset(KeyedValues data) 它通过从KeyedValues实例复制数据来创建新数据集。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | setValue(java.lang.Comparable key, double value) 它设置密钥的数据值,并向所有已注册的侦听器发送DatasetChangeEvent 。 |
2 | setValue(java.lang.Comparable key, java.lang.Number value) 它设置密钥的数据值,并向所有已注册的侦听器发送DatasetChangeEvent 。 |
SeriesException类
这是一个例外类。 它引发了数据集中数据的时间序列中发生的异常。 发生重复或无效数据时会出现例外情况。 时间序列不能与重复项一起应用,格式必须有效。
DefaultCategoryDataset
这是CategoryDataset接口的默认实现类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | DefaultCategoryDataset() 此构造函数创建新的空数据集。 |
类方法 (Class Method)
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。
XYDataset
这是一个接口,通过该接口可以访问(x,y)项目形式的数据。 顾名思义,您可以使用此数据集来提供XY图表。 此接口中的某些方法取自SeriesDateset接口。
XYZDataset
这是一个接口,通过该接口可以访问(x,y,z)项目形式的数据。 顾名思义,您可以使用此数据集来提供XYZ图表。 此接口中的某些方法取自SeriesDateset。
XYSeries
这是一个类,它表示形式为(x,y)的零个或多个数据项的序列。 默认情况下,系列中的项目按x值按升序排序,并允许重复的x值。 排序和重复的默认值都可以在构造函数中更改。 Y值可以表示为null以表示缺失值。
类构造函数 (Class Constructor)
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系列。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | add(double x, double y) 此方法将数据项添加到系列中。 |
上面的方法用于教程示例中。 如果您想了解其余的方法和字段,请参阅JFreeChart API。
XYSeriesCollection
XYSeriesCollection类具有父类,如AbstractIntervelDataset,AbstractXYDatset,AbstractSeriesDataset和AbstractDataset。 此类中的某些方法属于此类的父类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | XYSeriesCollection() 它构造一个空数据集。 |
2 | XYSeriesCollection(XYSeries xyseries) 它构造一个数据集并用一个系列填充它。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | addSeries(XYSeries series) 此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有已注册的侦听器。 |
有关其余方法和字段,请参阅JFreeChart API。
默认XYZDataset
DefaultXYZDataset类具有父类,如AbstractIntervelDataset,AbstractXYDatset,AbstractSeriesDataset,AbstractDataset和AbstractXYZDataset。 此类中的某些方法属于此类的父类。
类构造函数
S.No | 构造函数和描述 |
---|---|
1 | DefaultXYZDataset() 它构造一个空数据集。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | addSeries(java.lang.Comparable seriesKey, double[ ][ ] data ) 此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有已注册的侦听器。 |
有关其余方法和字段,请参阅JFreeChart API。
JFreeCharts中的时间序列
包是org.jfree.data.time 。 该包包含类和接口,用于与时间相关的数据。
TimeSeries
此类以周期值的形式表示一系列数据项,其中period是RegularTimePeriod抽象类的某个实例,例如Time,Day,Hour,Minute和Second类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | TimeSeries(java.lang.Comparable name) 它创造了新的空系列。 |
2 | TimeSeries(java.lang.Comarable name, java.lang.String domain, java.lang.Strin range) 它创建了不包含任何数据的新时间序列。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | add(RegularTimePeriod period,double value) 此方法将新数据项添加到系列中。 |
有关其余方法和字段,请参阅JFreeChart API。
TimeSeriesCollection
这是一个用作时间序列对象集合的类。 该类实现了XYDataset接口,并扩展了IntervelXYDataset接口。 这样可以方便地收集系列数据对象。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | TimeSeriesCollection() 它构造一个空数据集,绑定到默认时区。 |
2 | TimeSeriesCollection(TimeSeries系列) 它构建一个包含单个系列的数据集(可以添加更多),与默认时区绑定。 |
3 | TimeSeriesCollection(TimeSeries系列,java.util.TimeZone区域) 它构建一个包含单个系列的数据集(可以添加更多),并绑定到特定时区。 |
4 | TimeSeriesCollection (java.util.TimeZone zone) 它构造一个空数据集,绑定到特定时区。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | addSeries(TimeSeries系列) 此方法将一系列添加到集合中,并将DatasetChangeEvent发送到所有已注册的侦听器。 |
有关其余方法和字段,请参阅JFreeChart API。
Second
这个类代表特定日期的第二个。 此类是不可变的,这是所有RegularTimePeriod子类的要求。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | Second() 它根据系统日期/时间构建一个新的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) 它构建了一个新的第二个。 |
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | getSecond() 它在一分钟内返回第二个。 |
2 | next() 它返回当前秒之后的第二个。 |
有关其余方法和字段,请参阅JFreeChart API。
JFreeCharts中的框架
包是org.jfree.ui 。 这个包属于JFreeChart的JCommons API。 它包含用于为预配置图表创建框架的实用程序类。
ApplicationFrame
这是为简单应用程序创建主框架的基类。 框架侦听窗口关闭事件,并通过关闭JVM进行响应。 这适用于小型演示应用程序。 对于企业应用程序,您需要使用更强大的东西。 此类中的主要核心方法取自Component,Container,Window,Frame和Jframe类。
类构造函数 (Class Constructor)
S.No | 构造函数和描述 |
---|---|
1 | ApplicationFrame(java.lang.String title) 它使用字符串标题创建一个应用程序框架。 |
该类有助于创建AWT帧。 这就是我们在本教程示例中将此类用作超类的原因。
从父类中获取的方法用于打开框架,关闭框架,更改大小,更改背景或前景颜色以及侦听器。
RefineryUtilities (RefineryUtilities)
这是与用户界面相关的实用方法的类集合。
类方法 (Class Method)
S.No | 方法和描述 |
---|---|
1 | centerFrameOnScreen(java.awt.Window frame) 它将指定的帧定位在屏幕中间。 |
上面的方法用于教程示例中。 有关其余方法和字段,请参阅JFreeChart API。
JFreeChart - Pie Chart
在饼图中,每个扇区的弧长与其代表的数量成比例。 本章演示了如何使用JFreeChart从给定的业务数据集创建Pie Chart 。
业务数据 (Business data)
以下示例在饼图的帮助下描述了移动销售。 以下是不同移动品牌及其销售(每日单位)的列表。
S.No | 移动品牌 | 销售额(每天UNITS) |
---|---|---|
1 | IPhone 5S | 20 |
2 | Samsung Grand | 20 |
3 | MOTO G | 40 |
4 | 诺基亚Lumia | 10 |
基于AWT的应用 (AWT Based Application)
以下是使用上述信息创建饼图的代码。 此代码可帮助您在任何基于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允许您以JPG或PNG格式保存图表图像。
JPEG图像创建 (JPEG Image Creation)
让我们重新编写上面的例子,从命令行生成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 - Bar Chart
本章演示了如何使用JFreeChart从给定的业务数据集创建Bar Chart 。
条形图使用不同的方向(水平或垂直)条形来显示各种类别的比较。 图表的一个轴(域轴)显示正在比较的特定域,另一个轴(范围轴)表示离散值。
业务数据
以下示例借助条形图描绘了各种汽车统计数据。 以下是汽车品牌及其不同特征的列表,我们将使用条形图显示 -
汽车 | 速度 | 用户评分 | Millage | 安全 |
---|---|---|---|---|
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 Based Application)
以下是从上面给出的信息创建条形图的代码。 此代码可帮助您在任何基于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
如果一切正常,它将编译并运行以生成以下条形图 -
JPEG图像创建 (JPEG Image Creation)
让我们重新编写上面的例子,从命令行生成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 - Line Chart
折线图或折线图将信息显示为由直线段连接的一系列数据点(标记)。 折线图显示数据在相同时间频率下的变化情况。
本章演示了如何使用JFreeChart从给定的业务数据集创建Line Chart 。
业务数据
以下示例绘制折线图,以显示从1970年开始的不同年份开设的学校数量的趋势。
鉴于数据如下 -
年 | 学校数量 |
---|---|
1970 | 15 |
1980 | 30 |
1990 | 60 |
2000 | 120 |
2013 | 240 |
2014 | 300 |
基于AWT的应用 (AWT Based Application)
以下是从上面给出的信息创建折线图的代码。 此代码可帮助您在任何基于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
如果一切正常,它将编译并运行以生成以下线图 -
JPEG图像创建 (JPEG Image Creation)
让我们重新编写上面的例子,从命令行生成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 Chart
XY图表(散点图)基于一个由X和Y值列表组成的数据系列。 每个值对(X,Y)是坐标系中的一个点。 这里,一个值确定水平(X)位置,另一个确定垂直(Y)位置。 本章演示了如何使用JFreeChart从给定的业务数据集创建XY Chart 。
业务数据
考虑一个我们想要为所有主流浏览器创建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的应用 (AWT Based Application)
以下是从上面给出的信息创建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图 -
JPEG图像创建 (JPEG Image Creation)
让我们重新编写上面的例子,从命令行生成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 Pie/Bar Chart
3D图表是以三维格式出现的图表。 您可以使用这些图表来提供更好的显示和清晰的信息。 3D饼图与饼图相同,具有漂亮的3D效果。 通过添加一些额外的代码可以实现3D效果,这将代表在饼图中创建3D效果。
3D饼图
请考虑以下示例,借助3D饼图来说明移动销售。 以下是不同移动品牌及其销售(每日单位)的列表。
S.No | 移动品牌 | 销售额(每天UNITS) |
---|---|---|
1 | IPhone 5S | 20 |
2 | Samsung Grand | 20 |
3 | MOTO G | 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饼图 -
3D条形图
3D条形图与条形图相同,另外还具有漂亮的3D效果。 通过添加一些额外的代码可以实现3D效果,这将在条形图中创建3D效果。 请考虑以下示例,该示例借助于3D条形图描绘各种汽车统计数据。 以下是汽车品牌及其不同特征的列表,我们将使用条形图显示 -
汽车 | 速度 | 用户评分 | Millage | 安全 |
---|---|---|---|---|
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 - Bubble Chart
本章演示了如何使用JFreeChart从给定的业务数据集创建Bubble Chart 。 气泡图以三维方式显示信息。 在(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 Based Application)
以下是从上面给出的信息创建气泡图的代码。 此代码可帮助您在任何基于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 Image Creation)
让我们重新编写上面的例子,从命令行生成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 - TimeSeries Chart
时间序列图表显示数据点序列,它们以相等的时间间隔变化。 本章演示了如何使用JFreeChart从给定的业务数据集创建Time Series Chart 。
业务数据
让我们考虑使用标准Java API Math.random()生成的各种随机数。 我们使用这些数字来生成时间序列图表。 您可以在给定的时间间隔内为网站中发生的错误总数生成类似的图表。
基于AWT的应用 (AWT Based Application)
以下是在给定时间内部由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 Image Creation)
让我们重新编写上面的例子,从命令行生成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 - File Interface
到目前为止,我们研究了如何使用静态数据使用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 - Database Interface
本章介绍如何从数据库表中读取简单数据,然后使用JFreeChart创建您选择的图表。
业务数据
考虑我们有以下MySQL表mobile_tbl(mobile_brand VARCHAR(100)NOT NULL,unit_sale INT NO NULL);
考虑这张表有以下记录 -
移动品牌 | 单位销售 |
---|---|
IPhone5S | 20 |
Samsung Grand | 20 |
MotoG | 40 |
诺基亚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图像文件,其中包含以下图表。