下面是使用JFreeChart库实现的完整代码:

import java.io.File;
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.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;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;

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(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(
                "Line Chart Example", // 图表标题
                "Time", // 水平轴标签
                "Value", // 垂直轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否显示图例
                true, // 是否生成工具提示
                false // 是否生成URL链接
        );

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

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

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

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

        System.out.println("Line chart created successfully.");
    }
}

请确保已将JFreeChart库添加到项目的依赖项中。此代码将读取名为"input.xlsx"的Excel文件,并从"P1"工作表中提取数据。然后,它将创建一个折线图,水平轴为时间格式,垂直轴为数据格式,并将图表保存为"line_chart.png"文件。

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

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

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