要使用JFreeChart库来制作折线图,首先需要导入相应的库文件。在项目中添加以下依赖项:

<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.3</version>
</dependency>
<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jcommon</artifactId>
    <version>1.0.23</version>
</dependency>

然后,可以按照以下步骤使用JFreeChart库来制作折线图:

  1. 读取Excel文件中的数据。可以使用Apache POI库来读取Excel文件中的数据。以下是一个简单的示例代码,用于读取文件input.xlsx中的P1工作表中的A2-A50、B2-B50和C2-C50的数据:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelReader {
    public static void main(String[] args) {
        try {
            FileInputStream file = new FileInputStream(new File("input.xlsx"));
            Workbook workbook = new XSSFWorkbook(file);
            Sheet sheet = workbook.getSheet("P1");

            List<Double> xAxisData = new ArrayList<>();
            List<Double> yAxisData = new ArrayList<>();
            List<Double> secondaryYAxisData = new ArrayList<>();

            for (int i = 1; i <= 49; i++) {
                Row row = sheet.getRow(i);
                Cell xCell = row.getCell(0);
                Cell yCell = row.getCell(1);
                Cell secondaryYCell = row.getCell(2);

                xAxisData.add(xCell.getNumericCellValue());
                yAxisData.add(yCell.getNumericCellValue());
                secondaryYAxisData.add(secondaryYCell.getNumericCellValue());
            }

            // 绘制折线图的代码

            workbook.close();
            file.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  1. 创建一个XYDataset对象,用于存储折线图的数据。可以使用XYSeriesCollection类来创建XYDataset对象,并将数据添加到其中。以下是一个示例代码:
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

// 在读取Excel文件数据的代码后面添加以下代码

XYSeriesCollection dataset = new XYSeriesCollection();

XYSeries series1 = new XYSeries("Y轴");
for (int i = 0; i < xAxisData.size(); i++) {
    series1.add(xAxisData.get(i), yAxisData.get(i));
}

XYSeries series2 = new XYSeries("次要Y轴");
for (int i = 0; i < xAxisData.size(); i++) {
    series2.add(xAxisData.get(i), secondaryYAxisData.get(i));
}

dataset.addSeries(series1);
dataset.addSeries(series2);
  1. 创建一个JFreeChart对象,并设置折线图的样式和标题。以下是一个示例代码:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.ui.RectangleInsets;

// 在创建XYDataset对象的代码后面添加以下代码

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

chart.setBackgroundPaint(java.awt.Color.white);

XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(java.awt.Color.lightGray);
plot.setAxisOffset(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
plot.setDomainGridlinePaint(java.awt.Color.white);
plot.setRangeGridlinePaint(java.awt.Color.white);

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesLinesVisible(0, true);
renderer.setSeriesShapesVisible(0, false);
renderer.setSeriesLinesVisible(1, true);
renderer.setSeriesShapesVisible(1, false);
plot.setRenderer(renderer);
  1. 将折线图保存为图片文件。可以使用ChartUtilities类的saveChartAsPNG方法将折线图保存为PNG格式的图片文件。以下是一个示例代码:
import org.jfree.chart.ChartUtilities;

// 在设置折线图样式和标题的代码后面添加以下代码

try {
    ChartUtilities.saveChartAsPNG(new File("linechart.png"), chart, 800, 600);
} catch (IOException e) {
    e.printStackTrace();
}

完成以上步骤后,运行程序,将会在项目目录下生成一个名为linechart.png的折线图图片文件。

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

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

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