java类中使用Jfreechart的简单实例

yizhihongxing

下面是使用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日

相关文章

  • jQuery解析json数据实例分析

    下面将为您介绍如何使用 jQuery 解析 JSON 数据。 解析 JSON 数据的方法 使用 jQuery 的 $.parseJSON() 方法 通过使用 jQuery 的 $.parseJSON() 方法可以将字符串形式的 JSON 数据转化为 JavaScript 对象。 var jsonData = ‘{"name":"…

    Java 2023年6月15日
    00
  • 浅析Spring的事务实现原理

    浅析Spring的事务实现原理 前言 在开发Java应用程序中,事务管理是一个非常常见而且非常重要的话题。Spring作为一个开源的企业级应用程序开发框架,其事务管理功能是非常强大的。在本文中,我们将深入浅出的分析Spring的事务实现原理。 Spring事务管理架构 Spring的事务管理是建立在抽象层之上的。其包含了4个不同的类:PlatformTran…

    Java 2023年5月20日
    00
  • java线程之使用Runnable接口创建线程的方法

    使用Runnable接口创建线程的方法是Java中最基本、最常见的线程创建方式。下面我将为大家详细介绍如何使用该方法创建线程。 步骤一:创建一个实现Runnable接口的类 要使用Runnable接口创建线程,首先需要创建一个实现了该接口的类。这个类要重写run()方法,并实现线程的具体逻辑。例如: public class MyRunnable imple…

    Java 2023年5月19日
    00
  • spring快速入门实例教程

    下面我来详细讲解一下“spring快速入门实例教程”的完整攻略。 一、前置条件 在学习本教程之前,需要掌握Java编程基础和基本的Spring框架概念。 二、环境搭建 安装JDK:下载并安装Java开发工具包(JDK) 安装IDEA:下载并安装IntelliJ IDEA集成开发环境 创建Maven项目:在IDEA中创建一个基于Maven的Spring项目 三…

    Java 2023年5月19日
    00
  • Java日期与时间类原理解析

    Java日期与时间类原理解析 介绍 Java日期与时间类是Java标准库中的一个重要组成部分,它提供了一系列的类和方法,用于处理日期、时间和时间区域相关的问题。在Java程序开发中,日期和时间是必不可少的数据类型,因此学习Java日期与时间类是非常重要的。 本文将介绍Java日期与时间类的原理和使用,包括常用类:Date、DateFormat、SimpleD…

    Java 2023年5月20日
    00
  • 一文搞懂Spring Security异常处理机制

    下面我将详细讲解“一文搞懂Spring Security异常处理机制”的完整攻略。 1. 什么是Spring Security异常处理机制 Spring Security异常处理机制是指Spring Security在运行过程中遇到异常时的处理方式,它是构建Spring Security安全体系的重要部分。Spring Security将异常处理机制交给了一…

    Java 2023年6月3日
    00
  • springmvc的@Validated注解使用

    下面我将为您详细讲解“springmvc的@Validated注解使用”的完整攻略。 什么是@Validated注解 在Spring MVC中,我们经常需要在控制器方法中对传入的参数进行校验,@Validated注解就是用来实现参数校验的。 如何使用@Validated注解 配置Spring MVC支持参数校验 首先需要在Spring MVC的配置文件中开启…

    Java 2023年5月16日
    00
  • Java 认识异常并掌握使用

    Java 认识异常并掌握使用 什么是异常? 在 Java 基础语法中,当程序执行过程中发生错误或异常时,会抛出异常,异常即指程序在运行过程中遇到的错误或意外情况。Java 中的异常是用于处理程序意外情况的一种机制。 异常的分类 Java 中的异常一般分为两类:可检查异常(checked exception)和不可检查异常(unchecked exceptio…

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