Java读取Excel数据绘制动态历时曲线图

想要用Java绘制美观的历时曲线图?本文将带你一步步实现,从读取Excel数据到利用JFreeChart库生成图表,清晰易懂。

所需工具:

  • Apache POI:用于读取Excel文件数据
  • JFreeChart:用于创建各种类型的图表,包括曲线图

步骤详解:

  1. 读取Excel数据:

    • 利用Apache POI库读取Excel文件(例如data.xlsx)中的数据。
    • 将读取到的数据存储在Java数据结构中,例如ArrayList或HashMap。
  2. 创建数据集:

    • 将存储的数据转换为JFreeChart可识别的数据集格式,例如DefaultCategoryDataset。
    • 按照需求组织数据,例如将时间作为X轴,数值作为Y轴。
  3. 生成历时曲线图:

    • 使用JFreeChart库的ChartFactory.createLineChart()方法创建曲线图对象。
    • 设置图表标题、X轴标签、Y轴标签等属性。
    • 将准备好的数据集传入图表对象。
  4. 保存或展示图表:

    • 使用ChartUtilities.saveChartAsPNG()方法将生成的图表保存为PNG图像文件。
    • 也可以将图表嵌入到Java GUI应用程序中进行展示。

示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
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.ss.usermodel.WorkbookFactory;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class ExcelChart {

    public static void main(String[] args) throws IOException {

        // 读取Excel文件
        FileInputStream inputStream = new FileInputStream(new File('data.xlsx'));
        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0);

        // 存储数据
        HashMap<String, ArrayList<Integer>> data = new HashMap<>();
        for (Row row : sheet) {
            Cell cell1 = row.getCell(0);
            Cell cell2 = row.getCell(1);
            String category = cell1.getStringCellValue();
            int value = (int) cell2.getNumericCellValue();
            if (!data.containsKey(category)) {
                data.put(category, new ArrayList<Integer>());
            }
            data.get(category).add(value);
        }

        // 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        for (String category : data.keySet()) {
            ArrayList<Integer> values = data.get(category);
            for (int i = 0; i < values.size(); i++) {
                dataset.addValue(values.get(i), category, Integer.toString(i + 1));
            }
        }

        // 创建曲线图
        JFreeChart chart = ChartFactory.createLineChart(
                '历时曲线', // 图表标题
                '时间', // X轴标签
                '数值', // Y轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否显示图例
                true, // 是否显示提示
                false // 是否生成URL链接
        );

        // 保存为图像文件
        ChartUtilities.saveChartAsPNG(new File('chart.png'), chart, 600, 400);
    }
}

示例Excel数据格式:

| 类别 | 值1 | 值2 | 值3 | | ---- | ---- | ---- | ---- | | 类别1 | 10 | 20 | 30 | | 类别2 | 5 | 15 | 25 | | 类别3 | 8 | 12 | 16 |

通过以上步骤和代码示例,你可以轻松地使用Java读取Excel数据并生成动态历时曲线图。

Java读取Excel数据绘制动态历时曲线图

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

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