以下是使用JFreeCharts库实现的完整代码:

import 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();
        }
    }
}

请确保在运行代码之前已经将JFreeCharts库添加到项目的依赖中。该代码会读取文件input.xlsx中的P1工作表中的数据,并创建一个包含两个时间序列的折线图。水平轴为时间格式,垂直轴为B2-B50的数据,次要垂直轴为C2-C50的数据。最后,将图表保存为名为linechart.jpg的图片文件。

在文件inputxlsx中有一个P1工作表用其中A2-A50的数据作为水平轴水平轴要为时间格式用B2-B50的数据作为垂直轴用C2-C50的数据作为次要垂直轴制作一个折线图用JFreeCharts库实现的完整代码

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

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