使用JFreeChart绘制Excel时间序列双轴折线图

本文将介绍如何使用Java和JFreeChart库从Excel文件读取数据, 并创建一个包含两个时间序列和双垂直轴的折线图。水平轴将显示时间格式, 垂直轴将显示Excel文件中指定列的数据。

代码实现

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

import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellType;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.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.data.time.Day;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;

public class LineChartExample { public static void main(String[] args) { try { // 读取Excel文件 FileInputStream file = new FileInputStream(new File('input.xlsx')); Workbook workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheet('P1');

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

        // 创建时间序列            TimeSeries series1 = new TimeSeries('垂直轴');            TimeSeries series2 = new TimeSeries('次要垂直轴');

        // 读取数据并添加到时间序列            for (int i = 1; i <= 50; i++) {                Row row = sheet.getRow(i);                Cell cell1 = row.getCell(0);                Cell cell2 = row.getCell(1);                Cell cell3 = row.getCell(2);

            if (cell1.getCellType() == CellType.NUMERIC && cell2.getCellType() == CellType.NUMERIC                        && cell3.getCellType() == CellType.NUMERIC) {                    Day day = new Day((int) cell1.getNumericCellValue(), 1, 2022);                    series1.add(day, cell2.getNumericCellValue());                    series2.add(day, cell3.getNumericCellValue());                }            }

        // 添加时间序列到集合            dataset.addSeries(series1);            dataset.addSeries(series2);

        // 创建折线图            JFreeChart chart = ChartFactory.createXYLineChart('折线图', '时间', '垂直轴', dataset, PlotOrientation.VERTICAL,                    true, true, false);

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

        // 设置次要垂直轴            plot.setDataset(1, dataset);            plot.mapDatasetToRangeAxis(1, 1);            plot.setRangeAxis(1, new org.jfree.chart.axis.NumberAxis('次要垂直轴'));

        // 设置折线图渲染器            XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();            renderer.setSeriesShapesVisible(0, false);            renderer.setSeriesShapesVisible(1, false);            plot.setRenderer(renderer);

        // 保存图表为图片            ChartUtilities.saveChartAsJPEG(new File('linechart.jpg'), chart, 500, 300);

        // 关闭文件流            file.close();            workbook.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

代码说明

  1. 导入必要的库: 代码首先导入必要的JFreeChart和Apache POI库来处理Excel文件和创建图表。

  2. 读取Excel数据: 代码读取名为 'input.xlsx' 的Excel文件, 并获取名为 'P1' 的工作表。然后, 它循环遍历工作表中的每一行, 将A列作为时间数据, B列和C列作为两个不同时间序列的数据。

  3. 创建JFreeChart数据集: 代码创建 TimeSeriesCollection 对象来存储时间序列数据。

  4. 创建JFreeChart图表: 代码使用 ChartFactory.createXYLineChart() 方法创建折线图, 并设置图表标题, 坐标轴标签等属性。

  5. 配置图表: 代码将水平轴设置为时间格式, 并添加次要垂直轴以显示第二个时间序列数据。

  6. 保存图表: 最后, 代码将图表保存为名为 'linechart.jpg' 的JPEG图片文件。

总结

这段代码展示了如何使用JFreeChart库从Excel文件读取数据, 并创建一个包含时间格式水平轴和双垂直轴的折线图。 通过修改代码, 可以轻松地自定义图表的外观和功能, 例如更改颜色, 添加图例和标题等。

使用JFreeChart绘制Excel时间序列双轴折线图

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

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