В настоящее время генерируется диаграмма рассеяния с использованием POI, однако график выглядит странно:
Один из них генерируется с использованием моего кода, другой - вручную в Excel.
Они оба имеют тип «разброс с прямыми линиями и маркерами», однако сгенерированный график по некоторым причинам показывает кривые линии. Другая проблема заключается в том, что каждая из точек данных указана отдельно в легенде, а также имеет другой цвет.
public void GenerateChart(XSSFSheet sheet) {
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);
XSSFChart chart = drawing.createChart(anchor);
XSSFChartLegend legend = chart.getOrCreateLegend();
legend.setPosition(LegendPosition.TOP_RIGHT);
XSSFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
XSSFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
CellRangeAddress crXData = new CellRangeAddress(1, sheet.getLastRowNum(), 0, 0);
CellRangeAddress crYData = new CellRangeAddress(1, sheet.getLastRowNum(), 1, 1);
CellReference crTitle = new CellReference(0,1);
Cell cell = sheet.getRow(crTitle.getRow()).getCell(crTitle.getCol());
ChartDataSource<Number> dsXData = DataSources.fromNumericCellRange(sheet, crXData);
ChartDataSource<Number> dsYData = DataSources.fromNumericCellRange(sheet, crYData);
XSSFScatterChartData data = chart.getChartDataFactory().createScatterChartData();
ScatterChartSeries seriesTitler = data.addSerie(dsXData, dsYData);
seriesTitler.setTitle(cell.getStringCellValue());
chart.plot(data, bottomAxis, leftAxis);
}
Использование Apache POI 3.17
Документация здесь показывает, что XSSFScatterChartData
и другие устаревшие, и что вместо этого я должен использовать XDDFScatterChartData
. Однако я не могу понять, где взять .jar, чтобы использовать это. Я предполагаю, что это в бета-версии?
Что я хочу сделать, это сгенерировать что-то вроде диаграммы справа от изображения, созданной вручную. Поскольку POI, позволяющая создавать диаграммы, кажется относительно новой вещью, я не смог найти никаких подсказок. Кто-нибудь знает хитрость?