java类中使用Jfreechart的简单实例

下面是使用JFreeChart库在Java类中绘制图表的完整攻略。

准备工作

在开始使用JFreeChart之前,我们需要先将其添加到我们的工程中。可以通过以下步骤完成:

  1. 下载JFreeChart库的jar包,可以从官方网站 www.jfree.org 上获得。

  2. 将下载的jar包拷贝到工程的lib目录下。

  3. 在Eclipse中添加JFreeChart库到Java Build Path中,具体操作为:右键点击工程名 - Build Path - Configure Build Path - Libraries - Add JARs... - 选择JFreeChart库的jar包。

  4. 确认添加成功,便可愉快的开始使用JFreeChart库了。

实现过程

下面我们分别以折线图和柱状图为例,来介绍如何使用JFreeChart绘制图表。

折线图

示例代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
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.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

public class LineChartDemo extends JPanel {

    private static final long serialVersionUID = 1L;

    public LineChartDemo() {
        // 生成折线图数据
        XYDataset dataset = createDataset();
        // 创建折线图
        JFreeChart chart = createChart(dataset);
        // 将折线图保存到本地文件
        saveChart(chart, "linechart.png", 600, 400);
    }

    /**
     * 生成折线图数据
     */
    private XYDataset createDataset() {
        // 创建数据集
        XYSeriesCollection dataset = new XYSeriesCollection();
        // 创建数据
        XYSeries series = new XYSeries("随机数据");
        for (int i = 0; i < 50; i++) {
            series.add(i, Math.random() * 100);
        }
        dataset.addSeries(series);
        return dataset;
    }

    /**
     * 创建折线图
     */
    private JFreeChart createChart(XYDataset dataset) {
        // 创建折线图
        JFreeChart chart = ChartFactory.createXYLineChart(
                "折线图示例", // 图表标题
                "X轴", // X轴标签
                "Y轴", // Y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否包含图例
                true, // 悬浮提示是否显示
                false // 是否使用url链接
        );
        // 设置折线图标题的字体
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        // 获取折线图画布
        XYPlot plot = chart.getXYPlot();
        // 设置画布背景颜色
        plot.setBackgroundPaint(Color.WHITE);
        // 设置坐标轴范围
        NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis();
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        domainAxis.setRange(0, 50);
        rangeAxis.setRange(0, 100);
        // 设置坐标轴标签的字体
        domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        // 设置坐标轴上刻度线条的字体
        domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
        rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
        // 设置折线图标注的字体
        XYItemRenderer renderer = plot.getRenderer();
        renderer.setBaseItemLabelsVisible(true);
        renderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        renderer.setBaseItemLabelGenerator((dataset, series, item) -> {
            double x = dataset.getXValue(series, item);
            double y = dataset.getYValue(series, item);
            return String.format("(%s,%s)", decimalFormat.format(x), decimalFormat.format(y));
        });
        // 设置折线图的样式
        renderer.setSeriesPaint(0, Color.BLUE);
        renderer.setSeriesStroke(0, new BasicStroke(2.0F));
        return chart;
    }

    /**
     * 将折线图保存到本地文件
     */
    private void saveChart(JFreeChart chart, String fileName, int width, int height) {
        File file = new File(fileName);
        try {
            ChartUtilities.saveChartAsPNG(file, chart, width, height);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

该示例中,首先通过createDataset()方法生成折线图数据,然后通过createChart()方法创建折线图实例,最后使用saveChart()方法将折线图保存到本地文件中。

其中,createChart()方法中的代码注释表明了各个设置的含义,按需进行修改即可。

柱状图

示例代码:

import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.DefaultCategoryDataset;

public class BarChartDemo extends JPanel {

    private static final long serialVersionUID = 1L;

    public BarChartDemo() {
        // 生成柱状图数据
        DefaultCategoryDataset dataset = createDataset();
        // 创建柱状图
        JFreeChart chart = createChart(dataset);
        // 将柱状图保存到本地文件
        saveChart(chart, "barchart.png", 600, 400);
    }

    /**
     * 生成柱状图数据
     */
    private DefaultCategoryDataset createDataset() {
        // 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        // 创建数据
        dataset.setValue(20, "销售额", "2019年");
        dataset.setValue(30, "销售额", "2020年");
        dataset.setValue(40, "销售额", "2021年");
        return dataset;
    }

    /**
     * 创建柱状图
     */
    private JFreeChart createChart(DefaultCategoryDataset dataset) {
        // 创建柱状图
        JFreeChart chart = ChartFactory.createBarChart(
                "柱状图示例", // 图表标题
                "年度", // X轴标签
                "销售额(万元)", // Y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否包含图例
                true, // 悬浮提示是否显示
                false // 是否使用url链接
        );
        // 设置柱状图标题的字体
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        // 获取柱状图画布
        CategoryPlot plot = chart.getCategoryPlot();
        // 设置画布背景颜色
        plot.setBackgroundPaint(Color.WHITE);
        // 设置X轴标签字体
        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 14));
        // 设置Y轴
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setTickUnit(new NumberTickUnit(10));
        rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 14));
        // 设置柱状图标注
        BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setBaseItemLabelsVisible(true);
        renderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));
        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer.setSeriesPaint(0, Color.BLUE);
        renderer.setMaximumBarWidth(0.1D);
        return chart;
    }

    /**
     * 将柱状图保存到本地文件
     */
    private void saveChart(JFreeChart chart, String fileName, int width, int height) {
        File file = new File(fileName);
        try {
            ChartUtilities.saveChartAsPNG(file, chart, width, height);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

该示例中,原理和折线图基本相同,只是需要使用DefaultCategoryDataset类来创建分类数据集。此外,柱状图的标注需要设置为StandardCategoryItemLabelGenerator类。

结尾

以上便是使用JFreeChart库在Java类中绘制图表的完整攻略,可以按照相应的步骤进行操作。同时,还需要注意,JFreeChart库封装了众多的标准图表,开发者可以根据自己的需求选择相应的绘图类库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java类中使用Jfreechart的简单实例 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • JDBC 入门(一)

    下面我来为您详细讲解“JDBC 入门(一)”的完整攻略。 JDBC 入门(一) JDBC全称Java Database Connectivity,是Java语言操作数据库的标准接口。下面从以下几个方面介绍JDBC入门。 1. JDBC的基本概念 JDBC是什么? JDBC是Java Database Connectivity的简称,它是Java语言操作数据库…

    Java 2023年5月30日
    00
  • Java的Struts框架报错“ModuleNotFoundException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ConfigurationException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 类型转换错误:如果类型转换错误,则可能出现此。在这种情况下,需要检查类型转换以解决此问题。 以下是两个实例: 例 1 如果配置文件中…

    Java 2023年5月5日
    00
  • Java Apache POI报错“EmptyFileException”的原因与解决办法

    “EmptyFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 空文件:如果文件为空,则可能会出现此异常。例如,可能会尝试打开一个空的Excel文档。 以下是两个实例: 例1 如果文件为空,则可以尝试检查文件是否存在以解决此问题。例如,在Java中,可以使用以下代码: File file = new Fil…

    Java 2023年5月5日
    00
  • IntelliJ IDEA中Scala、sbt、maven配置教程

    IntelliJ IDEA中Scala、sbt、maven配置教程 简介 IntelliJ IDEA是一款非常强大的IDE,可以支持多种编程语言。在其中配置Scala、sbt、maven,可以为Scala语言的开发提供较好的支持。 本文将详细讲解在IntelliJ IDEA中配置Scala、sbt、maven的过程。 Scala配置 安装Scala插件 在I…

    Java 2023年5月19日
    00
  • Java项目部署的完整流程(超详细!)

    下面是Java项目部署的完整流程攻略,包含如下步骤: 1. 编写Java项目代码 首先,我们需要先完成Java项目的编写工作。这里假设我们已经完成了项目的代码编写,并且已经进行了测试验证。 2. 配置构建工具 我们还需要配置构建工具,例如Maven或Gradle,以便能够方便地编译、打包和管理项目。 3. 打包项目 接下来,我们需要将项目打包成jar或war…

    Java 2023年5月19日
    00
  • 深入浅析Jsonp解决ajax跨域问题

    深入浅析Jsonp解决ajax跨域问题 什么是Jsonp Jsonp(JSON with Padding)是一种跨域数据交互的技术,它的原理是利用 script 标签的跨域特性。Jsonp的工作流程大致如下: 前端页面创建一个 script 标签,其中 src 属性值为要访问的跨域地址url,并在url中传递一个回调函数的参数; 后端服务器解析请求,并在返回…

    Java 2023年6月15日
    00
  • Java中的复合数据类型

    下面是Java中的复合数据类型的详细讲解: 什么是复合数据类型 在Java中,复合数据类型是由多个简单数据类型组合而成的数据类型,这些简单数据类型可以是Java内置的基本数据类型或是其他复合数据类型。复合数据类型也可以被称为复杂数据类型或组合数据类型。 在Java中,有以下几种复合数据类型:- 数组(Array)- 类(Class)- 接口(Interfac…

    Java 2023年5月26日
    00
  • 网页文字复制不了?网页文字不能复制的解决方法

    问题描述 有些网站或网页存在一个奇怪的现象,就是无法复制网页上的文字。这对于用户来说是一个很不方便的问题。比如有时候我们需要从网页上复制一些重要的信息,然后粘贴到别的地方使用,但是无论如何也无法复制,这时候我们该怎么办呢? 解决方法 要解决这个问题,首先需要了解产生这个问题的原因。一般来说,这种情况是由于网站使用了一些特殊的技术来防止用户复制网站上的文字。这…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部