使用JFreeChart绘制Excel双轴折线图

本文将介绍如何使用Java库JFreeChart从Excel文件中的数据创建双轴折线图。

问题描述

假设你有一个名为'input.xlsx'的Excel文件,其中包含一个名为'P1'的工作表。该工作表包含以下数据:

  • A列:时间数据 (例如:2023, 2024...)* B列:主要垂直轴数据* C列:次要垂直轴数据

我们的目标是创建一个折线图,其中:

  • 水平轴表示时间。* 主要垂直轴表示B列的数据。* 次要垂直轴表示C列的数据。

代码实现

以下是用JFreeChart库实现的完整Java代码:javaimport java.io.File;import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.time.RegularTimePeriod;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.time.Year;

public class LineChartExample { public static void main(String[] args) { // 读取Excel文件 Workbook workbook = null; try { workbook = new XSSFWorkbook(new File('input.xlsx')); } catch (IOException e) { e.printStackTrace(); }

    // 获取'P1'工作表        Sheet sheet = workbook.getSheet('P1');

    // 创建时间序列数据集        TimeSeriesCollection dataset = new TimeSeriesCollection();

    // 创建次要垂直轴数据集        DefaultCategoryDataset secondaryDataset = new DefaultCategoryDataset();

    // 遍历数据行        for (int i = 1; i <= 49; i++) {            Row row = sheet.getRow(i);            Cell cellA = row.getCell(0);            Cell cellB = row.getCell(1);            Cell cellC = row.getCell(2);

        // 获取时间值            RegularTimePeriod timePeriod = new Year((int) cellA.getNumericCellValue());

        // 获取垂直轴值            double valueB = cellB.getNumericCellValue();

        // 获取次要垂直轴值            double valueC = cellC.getNumericCellValue();

        // 添加数据到时间序列数据集            TimeSeries series = new TimeSeries('Series ' + i);            series.add(timePeriod, valueB);            dataset.addSeries(series);

        // 添加数据到次要垂直轴数据集            secondaryDataset.addValue(valueC, 'Series ' + i, timePeriod);        }

    // 创建折线图        JFreeChart chart = ChartFactory.createLineChart(                '双轴折线图示例', // 图表标题                '时间', // 水平轴标签                '值', // 垂直轴标签                dataset, // 数据集                PlotOrientation.VERTICAL, // 图表方向                true, // 是否显示图例                true, // 是否生成工具提示                false // 是否生成URL链接        );

    // 获取图表的绘图区域        XYPlot plot = (XYPlot) chart.getPlot();

    // 设置水平轴为时间格式        DateAxis dateAxis = new DateAxis('时间');        plot.setDomainAxis(dateAxis);

    // 设置垂直轴为数据格式        plot.setRangeAxis(1, secondaryDataset);

    // 保存图表为PNG图片        try {            ChartUtilities.saveChartAsPNG(new File('line_chart.png'), chart, 800, 600);        } catch (IOException e) {            e.printStackTrace();        }

    System.out.println('折线图已成功创建。');    }}

代码说明:

  1. 导入必要的库: 确保你的项目中包含了JFreeChart和Apache POI库。2. 读取Excel文件: 使用Apache POI库读取'input.xlsx'文件并获取'P1'工作表。3. 创建数据集: 创建两个数据集,一个用于主要垂直轴(TimeSeriesCollection),另一个用于次要垂直轴(DefaultCategoryDataset)。4. 填充数据集: 遍历Excel表格中的数据行,并将数据添加到相应的数据集中。5. 创建折线图: 使用ChartFactory.createLineChart()方法创建折线图对象。6. 设置轴格式: 将水平轴设置为时间格式,并将次要垂直轴添加到图表中。7. 保存图表: 将图表保存为PNG格式的图片文件。

总结

本文介绍了如何使用JFreeChart库创建带有双轴的折线图,并提供了完整的Java代码示例。你可以根据自己的需求修改代码,例如更改图表标题、轴标签和数据源等。

使用JFreeChart绘制Excel双轴折线图

原文地址: https://www.cveoy.top/t/topic/fSYL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录