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日

相关文章

  • Spring @DateTimeFormat日期格式化时注解场景分析

    我们来详细讲解一下“Spring @DateTimeFormat日期格式化时注解场景分析”的完整攻略。 标题 Spring @DateTimeFormat日期格式化时注解场景分析 简介 Spring框架提供了许多用于将前端页面提交的数据绑定到控制器方法中的注解。在这些注解中,我们可以使用@DateTimeFormat将String类型的日期时间数据绑定到ja…

    Java 2023年6月2日
    00
  • Android 下的 QuickJS Binding 库特性使用详解

    Android 下的 QuickJS Binding 库特性使用详解 简介 QuickJS Binding 库是一个用于在 Android 平台上使用 JavaScript 的库。这个库允许开发人员在 Android 应用中使用 JavaScript 进行开发,并且可以将 JavaScript 和 Java 进行相互调用。QuickJS Binding 库提…

    Java 2023年5月26日
    00
  • Java操作Jenkins操作凭证(Credential)信息方式

    Java 操作 Jenkins 操作凭证(Credential)信息方式 Jenkins的凭证(Credential)是一种安全机制,用于存储登录Jenkins服务器和与其他系统进行交互时所需的敏感信息,例如密码、API tokens等等。 使用Java操作Jenkins凭证可以让我们在Jenkins系统中实现更加安全的信息存储和交互,方便我们对Jenkin…

    Java 2023年5月20日
    00
  • feign post参数对象不加@RequestBody的使用说明

    关于“feign post参数对象不加@RequestBody的使用说明”,我将分以下几个方面进行详细讲解: @RequestBody注解的作用 不加@RequestBody的使用说明 示例说明 小结 1. @RequestBody注解的作用 首先,我们需要了解@RequestBody注解的作用。该注解用于将请求体中的参数绑定到方法参数上。即,使用该注解后,…

    Java 2023年5月23日
    00
  • MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

    下面是详细讲解”MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)”的完整攻略。 一、概述 MyBatis是一款基于Java语言的持久层框架,可以将SQL与业务逻辑分离,使得代码更加清晰易读,此外,MyBatis还提供了升级数据库方面的支持,无需编写太多的SQL脚本,MyBatis的性能表现也非常不错。而在MyBatis中,SQL语句连接参数…

    Java 2023年5月20日
    00
  • spring boot 注入 property的三种方式(推荐)

    在Spring Boot应用程序中,我们可以使用application.properties或application.yml文件来配置应用程序的属性。这些属性可以通过三种方式注入到Spring Bean中。下面是详解Spring Boot注入property的三种方式的完整攻略: 使用@Value注解 @Value注解是Spring框架提供的一种注入属性的方…

    Java 2023年5月14日
    00
  • JS自定义对象实现Java中Map对象功能的方法

    实现Java中Map对象的功能是通过JavaScript自定义对象来实现的。在JavaScript中,每个对象都可以包含一些属性和方法来定义其特定的行为。我们可以使用这一特性来模拟Java中的Map对象。 定义一个自定义对象 Map 对象是一个键值对的集合,我们可以用一个自定义的对象来代表这个集合。定义一个 Map 对象的例子如下: function Map…

    Java 2023年5月26日
    00
  • Java调用Windows的DOS命令的方法

    Java调用Windows的DOS命令的方法 在Java中调用Windows的DOS命令可以使用Java的Runtime类。Runtime类提供了一个exec()方法,通过该方法可以调用DOS命令并且获取它的返回结果。 下面是一个简单的调用DOS命令的示例: String command = "dir"; // 要执行的DOS命令 Pro…

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