java excel 导出多条折线图双y轴
时间: 2023-08-22 19:08:00 浏览: 147
要在Java中导出带有双Y轴的多条折线图到Excel,你可以继续使用Apache POI库和JFreeChart库,并进行一些适当的修改。以下是一个示例代码:
```java
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.data.xy.*;
import java.io.*;
public class ExcelLineChartExporter {
public static void main(String[] args) throws IOException {
// 创建Excel工作簿和工作表
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("折线图");
// 创建折线图数据集
XYDataset dataset = createDataset();
// 创建折线图
JFreeChart chart = createLineChart(dataset);
// 将折线图绘制到Excel工作表中
ByteArrayOutputStream chartImage = new ByteArrayOutputStream();
ChartUtils.writeChartAsPNG(chartImage, chart, 400, 300);
int pictureIdx = workbook.addPicture(chartImage.toByteArray(), Workbook.PICTURE_TYPE_PNG);
chartImage.close();
CreationHelper helper = workbook.getCreationHelper();
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0);
anchor.setRow1(0);
Picture picture = drawing.createPicture(anchor, pictureIdx);
picture.resize();
// 保存Excel文件
FileOutputStream fileOut = new FileOutputStream("折线图.xlsx");
workbook.write(fileOut);
fileOut.close();
System.out.println("折线图导出成功!");
}
private static XYDataset createDataset() {
// 创建折线图数据集
XYSeriesCollection dataset = new XYSeriesCollection();
// 添加折线图数据
XYSeries series1 = new XYSeries("系列1");
series1.add(1, 5);
series1.add(2, 3);
series1.add(3, 6);
dataset.addSeries(series1);
XYSeries series2 = new XYSeries("系列2");
series2.add(1, 4);
series2.add(2, 7);
series2.add(3, 9);
dataset.addSeries(series2);
return dataset;
}
private static JFreeChart createLineChart(XYDataset dataset) {
// 创建折线图
JFreeChart chart = ChartFactory.createXYLineChart(
"多条折线图", // 标题
"X轴", // X轴标签
"Y轴", // Y轴标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否包含图例
true, // 是否包含工具提示
false // 是否包含URL链接
);
// 获取绘图区域对象
XYPlot plot = chart.getXYPlot();
// 创建第二个Y轴
NumberAxis yAxis2 = new NumberAxis("Y轴2");
yAxis2.setAutoRangeIncludesZero(false);
plot.setRangeAxis(1, yAxis2);
// 将第二个数据集与第二个Y轴关联
plot.setDataset(1, createDataset());
plot.mapDatasetToRangeAxis(1, 1);
// 创建第二个渲染器
XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer();
renderer2.setSeriesPaint(0, ChartColor.BLUE);
plot.setRenderer(1, renderer2);
return chart;
}
}
```
在上述代码中,我们添加了一个名为`createLineChart`的新方法,用于创建带有双Y轴的折线图。我们使用了`XYPlot`和`NumberAxis`来创建第二个Y轴,并将第二个数据集与之关联。然后,我们创建了第二个渲染器`XYLineAndShapeRenderer`来设置第二个数据集的样式。
请注意,为了演示目的,我在`createLineChart`方法中直接调用了`createDataset`方法来创建第二个数据集。你可以根据实际需求修改代码以适应更复杂的数据集和样式。
同样,请确保已在项目中引入了Apache POI和JFreeChart的相关依赖。运行示例代码后,将会生成一个包含多条折线图的Excel文件。
阅读全文