使用JFreeChart绘制Excel数据的双Y轴折线图
使用JFreeChart将Excel数据绘制成双Y轴折线图
本文将介绍如何使用JFreeChart库从Excel文件'input.xlsx'的'P1'工作表中读取数据,并生成一个包含时间格式水平轴和双Y轴的折线图。
步骤1:导入必要的库
首先,需要在项目中添加以下依赖项:xml
步骤2:读取Excel数据
使用Apache POI库读取Excel文件'input.xlsx'中'P1'工作表中的数据:javaimport 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()); }
// 绘制折线图的代码 (见步骤3)
workbook.close(); file.close(); } catch (IOException e) { e.printStackTrace(); } }}
步骤3:创建数据集并绘制折线图java// ... (接步骤2代码)
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.axis.NumberAxis;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.data.xy.XYDataset;import org.jfree.data.xy.XYSeries;import org.jfree.data.xy.XYSeriesCollection;import org.jfree.ui.RectangleInsets;
// 创建数据集XYSeriesCollection dataset = new XYSeriesCollection();XYSeries series1 = new XYSeries('Y轴');XYSeries series2 = new XYSeries('次要Y轴');
for (int i = 0; i < xAxisData.size(); i++) { series1.add(xAxisData.get(i), yAxisData.get(i)); series2.add(xAxisData.get(i), secondaryYAxisData.get(i));}
dataset.addSeries(series1);dataset.addSeries(series2);
// 创建图表JFreeChart chart = ChartFactory.createXYLineChart( '折线图', '时间', '数值', dataset, PlotOrientation.VERTICAL, true, true, false );
// 设置图表样式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);
// 设置时间格式的水平轴DateAxis domainAxis = new DateAxis('时间');plot.setDomainAxis(domainAxis);
// 设置次要Y轴NumberAxis secondaryAxis = new NumberAxis('次要Y轴');plot.setRangeAxis(1, secondaryAxis);plot.setDataset(1, dataset);plot.mapDatasetToRangeAxis(1, 1);
// 设置线条样式XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();renderer.setSeriesLinesVisible(0, true);renderer.setSeriesShapesVisible(0, false);renderer.setSeriesLinesVisible(1, true);renderer.setSeriesShapesVisible(1, false);plot.setRenderer(renderer);
// 保存图表为图片try { ChartUtilities.saveChartAsPNG(new File('linechart.png'), chart, 800, 600);} catch (IOException e) { e.printStackTrace();}
// ...
步骤4:运行程序
运行程序后,将在项目目录下生成名为'linechart.png'的折线图图片文件,该图片将显示从Excel文件读取的数据,并带有时间格式的水平轴和双Y轴。
原文地址: https://www.cveoy.top/t/topic/fSYE 著作权归作者所有。请勿转载和采集!