public List<XDDFChartData> getChartSeries() { List<XDDFChartData> series = new LinkedList<>(); CTPlotArea plotArea = getCTPlotArea(); Map<Long, XDDFChartAxis> categories = getCategoryAxes(); Map<Long, XDDFValueAxis> values = getValueAxes(); for (int i = 0; i < plotArea.sizeOfBarChartArray(); i++) { CTBarChart barChart = plotArea.getBarChartArray(i); series.add(new XDDFBarChartData(barChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfLineChartArray(); i++) { CTLineChart lineChart = plotArea.getLineChartArray(i); series.add(new XDDFLineChartData(lineChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfPieChartArray(); i++) { CTPieChart pieChart = plotArea.getPieChartArray(i); series.add(new XDDFPieChartData(pieChart)); } for (int i = 0; i < plotArea.sizeOfRadarChartArray(); i++) { CTRadarChart radarChart = plotArea.getRadarChartArray(i); series.add(new XDDFRadarChartData(radarChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfScatterChartArray(); i++) { CTScatterChart scatterChart = plotArea.getScatterChartArray(i); series.add(new XDDFScatterChartData(scatterChart, categories, values)); } // TODO repeat above code for all kind of charts return series; }
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { if (chart.sizeOfAxIdArray() == 0) { for (Long id : categories.keySet()) { chart.addNewAxId().setVal(id); } for (Long id : values.keySet()) { chart.addNewAxId().setVal(id); } } defineAxes(chart.getAxIdArray(), categories, values); }
private static void setColumnData(XSLFChart chart, String chartTitle) { // Series Text List<XDDFChartData> series = chart.getChartSeries(); XDDFBarChartData bar = (XDDFBarChartData) series.get(0); // in order to transform a bar chart into a column chart, you just need to change the bar direction bar.setBarDirection(BarDirection.COL); // looking for "Stacked Bar Chart"? uncomment the following line // bar.setBarGrouping(BarGrouping.STACKED); // additionally, you can adjust the axes bar.getCategoryAxis().setOrientation(AxisOrientation.MAX_MIN); bar.getValueAxes().get(0).setPosition(AxisPosition.TOP); }
XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) bar.addSeries(xs, ys1); series1.setTitle("Bars", new CellReference("Sheet1!$B$1")); bar.setVaryColors(true); bar.setBarDirection(BarDirection.COL); chart.plot(bar);
private static void setBarData(XWPFChart chart, String chartTitle, String[] series, String[] categories, Double[] values1, Double[] values2) { final List<XDDFChartData> data = chart.getChartSeries(); final XDDFBarChartData bar = (XDDFBarChartData) data.get(0); final int numOfPoints = categories.length; final String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0)); final String valuesDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1)); final String valuesDataRange2 = chart.formatRange(new CellRangeAddress(1, numOfPoints, 2, 2)); final XDDFDataSource<?> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0); final XDDFNumericalDataSource<? extends Number> valuesData = XDDFDataSourcesFactory.fromArray(values1, valuesDataRange, 1); values1[6] = 16.0; // if you ever want to change the underlying data final XDDFNumericalDataSource<? extends Number> valuesData2 = XDDFDataSourcesFactory.fromArray(values2, valuesDataRange2, 2); XDDFChartData.Series series1 = bar.getSeries().get(0); series1.replaceData(categoriesData, valuesData); series1.setTitle(series[0], chart.setSheetTitle(series[0], 0)); XDDFChartData.Series series2 = bar.addSeries(categoriesData, valuesData2); series2.setTitle(series[1], chart.setSheetTitle(series[1], 1)); chart.plot(bar); chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612 chart.setTitleOverlay(false); }
bar.setBarDirection(BarDirection.COL);
private static void setColumnData(XWPFChart chart, String chartTitle) { // Series Text List<XDDFChartData> series = chart.getChartSeries(); XDDFBarChartData bar = (XDDFBarChartData) series.get(0); // in order to transform a bar chart into a column chart, you just need to change the bar direction bar.setBarDirection(BarDirection.COL); // looking for "Stacked Bar Chart"? uncomment the following line // bar.setBarGrouping(BarGrouping.STACKED); // additionally, you can adjust the axes bar.getCategoryAxis().setOrientation(AxisOrientation.MAX_MIN); bar.getValueAxes().get(0).setPosition(AxisPosition.TOP); } }
private static void setBarData(XSLFChart chart, String chartTitle, String[] series, String[] categories, Double[] values1, Double[] values2) { final List<XDDFChartData> data = chart.getChartSeries(); final XDDFBarChartData bar = (XDDFBarChartData) data.get(0); final int numOfPoints = categories.length; final String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0)); final String valuesDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1)); final String valuesDataRange2 = chart.formatRange(new CellRangeAddress(1, numOfPoints, 2, 2)); final XDDFDataSource<?> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0); final XDDFNumericalDataSource<? extends Number> valuesData = XDDFDataSourcesFactory.fromArray(values1, valuesDataRange, 1); values1[6] = 16.0; // if you ever want to change the underlying data final XDDFNumericalDataSource<? extends Number> valuesData2 = XDDFDataSourcesFactory.fromArray(values2, valuesDataRange2, 2); XDDFChartData.Series series1 = bar.getSeries().get(0); series1.replaceData(categoriesData, valuesData); series1.setTitle(series[0], chart.setSheetTitle(series[0], 0)); XDDFChartData.Series series2 = bar.addSeries(categoriesData, valuesData2); series2.setTitle(series[1], chart.setSheetTitle(series[1], 1)); chart.plot(bar); chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612 // chart.setTitleOverlay(overlay); }
public XDDFBarChartData(CTBarChart chart, Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { this.chart = chart; if (chart.getBarDir() == null) { chart.addNewBarDir().setVal(BarDirection.BAR.underlying); } for (CTBarSer series : chart.getSerList()) { this.series.add(new Series(series, series.getCat(), series.getVal())); } defineAxes(categories, values); }
public XDDFChartData createData(ChartTypes type, XDDFChartAxis category, XDDFValueAxis values) { Map<Long, XDDFChartAxis> categories = Collections.singletonMap(category.getId(), category); Map<Long, XDDFValueAxis> mapValues = Collections.singletonMap(values.getId(), values); final CTPlotArea plotArea = getCTPlotArea(); switch (type) { case BAR: return new XDDFBarChartData(plotArea.addNewBarChart(), categories, mapValues); case LINE: return new XDDFLineChartData(plotArea.addNewLineChart(), categories, mapValues); case PIE: return new XDDFPieChartData(plotArea.addNewPieChart()); case RADAR: return new XDDFRadarChartData(plotArea.addNewRadarChart(), categories, mapValues); case SCATTER: return new XDDFScatterChartData(plotArea.addNewScatterChart(), categories, mapValues); default: return null; } }
private void defineAxes(Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { if (chart.sizeOfAxIdArray() == 0) { for (Long id : categories.keySet()) { chart.addNewAxId().setVal(id); } for (Long id : values.keySet()) { chart.addNewAxId().setVal(id); } } defineAxes(chart.getAxIdArray(), categories, values); }
public List<XDDFChartData> getChartSeries() { List<XDDFChartData> series = new LinkedList<>(); CTPlotArea plotArea = getCTPlotArea(); Map<Long, XDDFChartAxis> categories = getCategoryAxes(); Map<Long, XDDFValueAxis> values = getValueAxes(); for (int i = 0; i < plotArea.sizeOfBarChartArray(); i++) { CTBarChart barChart = plotArea.getBarChartArray(i); series.add(new XDDFBarChartData(barChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfLineChartArray(); i++) { CTLineChart lineChart = plotArea.getLineChartArray(i); series.add(new XDDFLineChartData(lineChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfPieChartArray(); i++) { CTPieChart pieChart = plotArea.getPieChartArray(i); series.add(new XDDFPieChartData(pieChart)); } for (int i = 0; i < plotArea.sizeOfRadarChartArray(); i++) { CTRadarChart radarChart = plotArea.getRadarChartArray(i); series.add(new XDDFRadarChartData(radarChart, categories, values)); } for (int i = 0; i < plotArea.sizeOfScatterChartArray(); i++) { CTScatterChart scatterChart = plotArea.getScatterChartArray(i); series.add(new XDDFScatterChartData(scatterChart, categories, values)); } // TODO repeat above code for all kind of charts return series; }
public XDDFBarChartData(CTBarChart chart, Map<Long, XDDFChartAxis> categories, Map<Long, XDDFValueAxis> values) { this.chart = chart; if (chart.getBarDir() == null) { chart.addNewBarDir().setVal(BarDirection.BAR.underlying); } for (CTBarSer series : chart.getSerList()) { this.series.add(new Series(series, series.getCat(), series.getVal())); } defineAxes(categories, values); }
public XDDFChartData createData(ChartTypes type, XDDFChartAxis category, XDDFValueAxis values) { Map<Long, XDDFChartAxis> categories = Collections.singletonMap(category.getId(), category); Map<Long, XDDFValueAxis> mapValues = Collections.singletonMap(values.getId(), values); final CTPlotArea plotArea = getCTPlotArea(); switch (type) { case BAR: return new XDDFBarChartData(plotArea.addNewBarChart(), categories, mapValues); case LINE: return new XDDFLineChartData(plotArea.addNewLineChart(), categories, mapValues); case PIE: return new XDDFPieChartData(plotArea.addNewPieChart()); case RADAR: return new XDDFRadarChartData(plotArea.addNewRadarChart(), categories, mapValues); case SCATTER: return new XDDFScatterChartData(plotArea.addNewScatterChart(), categories, mapValues); default: return null; } }