65.9K
CodeProject 正在变化。 阅读更多。
Home

JFreeChart 入门

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.08/5 (4投票s)

2013年9月9日

CPOL

5分钟阅读

viewsIcon

75635

downloadIcon

827

本文将介绍 JFreeChart 库以及如何使用它来创建图表。

JFreeChart

图表是信息的视觉展示。图表有助于决策者快速及时地做出决策。JFreeChart 是一个免费的开源库,用于在 Java 中创建图表。JFreeChart 是创建图表最广泛使用的库,因为它提供了许多开箱即用的功能。

JFreeChart 特性

JFreeChart 库的主要特性是:

  • 它是开源的,100% 免费。它根据 GNU Lesser General Public License (LGPL) 分发,允许商业应用免费使用。
  • 它附带文档齐全的 API,使其易于使用。
  • 它支持多种图表类型,如饼图、折线图、条形图、面积图等。
  • JFreeChart 易于扩展,可用于客户端和服务器端应用程序。
  • 它支持多种输出格式,如 PNG、JPEG、PDF、SVG 等。
  • 它允许对图表进行广泛的自定义。

使用先决条件

  • Java 2:JFreeChart 完全用 Java 编写,并使用 Java 2D API 进行绘图。当前版本的 JFreeChart 可与 JRE 1.4.2 或更高版本一起使用。
  • JFreeChart:对于本教程,正在使用 JFreeChart 的 1.0.15 版本,这是截至目前的最新可用版本。

注意:JFreeChart 需要 JCommon 类库。它包含 JFreeChart 使用的通用类,以提供全局实用函数。

入门

现在我们对 JFreeCharts 有了基本了解,让我们创建一些演示图表,看看使用 JFreeChart 创建图表有多么容易。使用 JFreeChart 创建图表是一个三步过程。

  1. 首先创建包含要在图表中显示的数据的数据集。数据集的类型因要创建的图表类型而异。
  2. 下一步是为我们想要创建的特定类型的图表创建一个 JFreeChart 对象。在创建此对象时,我们需要传递数据集和其他参数。
  3. 最后一步是启动将此图表绘制到目标输出(如面板、网页等)的过程。

安装 JFreeChart

在开始演示之前,我们需要配置 JFreeChart 库。这非常简单;我们需要遵循以下步骤:

  1. http://www.jfree.org/jfreechart/download.html下载最新版本的 JFreeChart
  2. 将下载的文件解压到您选择的目录。将创建一个名为 jfreechart-<version_number> 的新目录。
  3. 如果您浏览 jfreechart-<version_number>,您会发现一个 lib 目录,其中包含 jfreechart-<version_number>.jarjcommon.jar
  4. 运行演示需要将这两个文件包含在我们的类路径中。

饼图演示

饼图用于在给定时间点直观地表示整体的百分比。饼图是一个圆形图,其扇区的大小与该扇区表示的数据成比例。

对于此演示,我们将创建一个饼图来表示特定季度不同手机制造商的市场份额。此处使用的数据不是实际数据,而是为演示目的创建的虚构数据。

创建数据集

正如我们已经讨论过的,创建图表的第一步是为要在图表中显示的数据创建数据集。对于饼图数据,我们需要一个实现 JFreeChart 的 org.jfree.data.general.PieDataset 接口的数据集。JFreeChart 为此接口提供了一个实现类,我们将使用它。该类是 org.jfree.data.general.DefaultPieDataset。使用此类,我们可以像下面这样创建饼图数据:

DefaultPieDataset objDataset = new DefaultPieDataset();
objDataset.setValue("Apple",29);
objDataset.setValue("HTC",15);
objDataset.setValue("Samsung",24);
objDataset.setValue("LG",7);
objDataset.setValue("Motorola",10);

创建饼图

下一步是创建饼图。JFreeChart 提供了一个 ChartFactory 类,我们使用它来创建各种类型的图表。要创建图表,我们需要调用此工厂的 createPieChart() 方法。

JFreeChart objChart = ChartFactory.createPieChart (
    "Demo Pie Chart",   //Chart title
    objDataset,          //Chart Data 
    true,               // include legend?
    true,               // include tooltips?
    false               // include URLs?
    );

在上面的代码中,我们传递了对数据集对象的引用。JFreeChart 在绘制图表时使用此引用来获取数据。有许多方法可以自定义图表,我们将在稍后进行探讨。对于此演示,我们使用了各种属性的默认值。

显示图表

最后一步是在目标源上显示图表。对于此演示目的,我们将在屏幕上的一个框架中显示图表。我们需要执行以下操作才能以这种方式显示图表:

ChartFrame frame = new ChartFrame("Demo", objChart);
frame.pack();
frame.setVisible(true);

此处使用的 ChartFrame 类包含显示图表在框架中的逻辑。此类提供了一个包含 ChartPanel 内图表的框架。ChartPanel 是用于显示图表的 Swing GUI 组件。它提供了许多自定义图表的控件。

技巧:如果您在框架中右键单击图表,ChartPanel 会显示一个弹出菜单,可用于更改已创建图表的某些属性。它还提供打印、另存为 PNG、缩放等功能。

最终图表输出

条形图演示

条形图用于直观地表示表格数据。通过遵循与创建上述饼图演示类似的步骤,我们可以轻松创建条形图。

继续我们为饼图使用的示例,假设我们有两个季度的市场份额数据,并且我们想了解不同手机制造商的市场份额从第一季度到第二季度的变化情况。

创建数据集

条形图使用的数据集类型为 org.jfree.data.category.CategoryDataset。与饼图数据集的默认实现类似,此数据集也有默认实现类。该类名为 org.jfree.data.category.DefaultCategoryDataset。可以使用以下方法:

DefaultCategoryDataset objDataset = new DefaultCategoryDataset();

objDataset.setValue(29,"Q1","Apple");
objDataset.setValue(15,"Q1","HTC");
objDataset.setValue(24,"Q1","Samsung");

objDataset.setValue(22,"Q2","Apple");
objDataset.setValue(18,"Q2","HTC");
objDataset.setValue(25,"Q2","Samsung");

创建条形图

与饼图创建方法类似,ChartFactory 也有一个创建条形图的方法。方法名是 createBarChart()

JFreeChart objChart = ChartFactory.createBarChart(
       "Demo Bar Chart",     //Chart title
    "Mobile Manufacturer",     //Domain axis label
    "Market Share",         //Range axis label
    chartData,         //Chart Data 
    PlotOrientation.VERTICAL, // orientation
    true,             // include legend?
    true,             // include tooltips?
    false             // include URLs?
);

正如我们所见,此方法具有一些附加属性。这些用于自定义条形图。

显示图表

由于我们也要在此框架中显示此图表,因此代码的显示部分将保持不变。我们只需传递条形图实例的引用而不是饼图。

ChartFrame frame = new ChartFrame("Demo", objChart);
frame.pack();
frame.setVisible(true);

最终图表输出

我们可以使用类似的过程创建其他图表。上面的演示展示了创建基本图表的方法,但这些图表可以进行大量自定义,例如 3D 显示、自定义饼图弧的颜色或条形图的条形、自定义背景颜色、保存图表等。

在接下来的文章中,我将探讨其他类型的图表以及自定义这些图表的各种选项。

© . All rights reserved.