在文件inputxlsx中有一个P1工作表用其中A2-A50的数据作为水平轴水平轴要为时间格式用B2-B50的数据作为垂直轴用C2-C50的数据作为次要垂直轴制作一个折线图用JFreeCharts库实现的完整代码
以下是使用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的图片文件。
原文地址: https://www.cveoy.top/t/topic/iilk 著作权归作者所有。请勿转载和采集!