Линейная диаграмма POI 4.1.0 y-серии показала неверную легенду - PullRequest
0 голосов
/ 12 октября 2019

как создать линейную диаграмму с одной легендой в серии y вместо отображения нескольких легенд в серии x

int rows = numberOfRows - 1;
int cols = headers.size();

XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);
XSSFChart chart = drawing.createChart(anchor);
chart.displayBlanksAs(DisplayBlanks.GAP);

XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP_RIGHT);

// Use a category axis for the bottom axis.
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
bottomAxis.setOrientation(AxisOrientation.MAX_MIN);
bottomAxis.setTitle("Date");

XDDFValueAxis rightAxis = chart.createValueAxis(AxisPosition.RIGHT);
rightAxis.setTitle("Rates");
rightAxis.setCrosses(AxisCrosses.AUTO_ZERO);

XDDFChartLegend chartLegend = chart.getOrAddLegend();
chartLegend.setPosition(LegendPosition.TOP_RIGHT);
chartLegend.setOverlay(false);

XDDFLineChartData lineChartData = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);

XDDFDataSource<String> xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, rows, 0, 0));

for (int col = 1; col < cols; col++) {
    XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, rows, col, col));
    XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) lineChartData.addSeries(xs, ys1);
    series1.setTitle(headers.get(col), null);
    series1.setSmooth(false);
    series1.setMarkerStyle(MarkerStyle.NONE);
}

chart.plot(lineChartData);

enter image description here

Выше на рисунке показана моя текущая линия Line-Chart, для y-серии ожидаются только 1 легенда, но было показано несколько

enter image description here

Над изображением LineДиаграмма построена с использованием Excel, у-серия показывает только одну легенду

1 Ответ

2 голосов
/ 12 октября 2019

Существует настройка для изменения цвета маркеров данных той же серии на диаграмме. См .: Измените цвета маркеров данных той же серии на графике . Это было false по умолчанию до Excel 2007. Теперь Microsoft решил сделать эту настройку true по умолчанию. Так что вам нужно явно установить это false, если вы не хотите этого.

В вашем случае:

...
XDDFLineChartData lineChartData = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);
lineChartData.setVaryColors(false);
...
...