我已经使用Apache POI生成了折线图。我的图表如下所示。
我需要在图表中显示蓝色系列(系列4)的峰值。我知道这是一个随机值,但我只需要知道有没有任何方法可以获取该值。每24个单元中出现一个峰值。有什么方法可以建立方程式,也可以通过任何方法来获得峰值显示的最大值(每24个像元有一个最大值)
我的代码如下。
XSSFSheet sheet6 = wb.createSheet("Graph");
Drawing<?> drawing21 = sheet6.createDrawingPatriarch();
ClientAnchor anchor11 = drawing21.createAnchor(0, 0, 0, 0, 1, 1, 17, 27);
Chart chart11 = drawing21.createChart(anchor11);
setRoundedCorners((XSSFChart)chart11, false);
ChartLegend legend11 = chart11.getOrCreateLegend();
legend11.setPosition(LegendPosition.RIGHT);
LineChartData data11 = chart11.getChartDataFactory().createLineChartData();
ChartAxis bottomAxis11 = chart11.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
ValueAxis leftAxis11 = chart11.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);
leftAxis11.setCrosses(AxisCrosses.AUTO_ZERO);
ChartDataSource<Number> xs11 = DataSources.fromNumericCellRange(sheet3, new CellRangeAddress(2, m-1, 0, 0));
ChartDataSource<Number> ys111 = DataSources.fromNumericCellRange(sheet3, new CellRangeAddress(2, m-1, 1, 1));
ChartDataSource<Number> ys211 = DataSources.fromNumericCellRange(sheet3, new CellRangeAddress(2, m-1, 3, 3));
ChartDataSource<Number> ys311 = DataSources.fromNumericCellRange(sheet3, new CellRangeAddress(2, m-1, 4, 4));
ChartDataSource<Number> ys411 = DataSources.fromNumericCellRange(sheet3, new CellRangeAddress(2, m-1, 8, 8));
LineChartSeries series111 = data11.addSeries(xs11, ys111);
series111.setTitle("NOERROR");
LineChartSeries series211 = data11.addSeries(xs11, ys211);
series211.setTitle("FAIL");
LineChartSeries series311 = data11.addSeries(xs11, ys311);
series311.setTitle("DOMAIN");
LineChartSeries series411 = data11.addSeries(xs11, ys411);
series411.setTitle("Total");
chart11.plot(data11, bottomAxis11, leftAxis11);
if (chart11 instanceof XSSFChart) {
XSSFChart xchart11 = (XSSFChart) chart11;
CTChart ctChart11 = xchart11.getCTChart();
CTTitle title11 = ctChart11.addNewTitle();
CTTx tx = title11.addNewTx();
CTTextBody rich = tx.addNewRich();
rich.addNewBodyPr();
CTTextParagraph para = rich.addNewP();
CTRegularTextRun r = para.addNewR();
r.setT("DNS - Total");
}
if (chart instanceof XSSFChart) {
XSSFChart xssfChart11 = (XSSFChart)chart11;
//Plot area background and border line
if (xssfChart11.getCTChartSpace().getSpPr() == null) xssfChart11.getCTChartSpace().addNewSpPr();
if (xssfChart11.getCTChartSpace().getSpPr().getSolidFill() == null)
xssfChart11.getCTChartSpace().getSpPr().addNewSolidFill();
if (xssfChart11.getCTChartSpace().getSpPr().getSolidFill().getSrgbClr() == null)
xssfChart11.getCTChartSpace().getSpPr().getSolidFill().addNewSrgbClr();
xssfChart11.getCTChartSpace().getSpPr().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)255,(byte)255,(byte)255});
if (xssfChart11.getCTChartSpace().getSpPr().getLn() == null) xssfChart11.getCTChartSpace().getSpPr().addNewLn();
xssfChart11.getCTChartSpace().getSpPr().getLn().setW(Units.pixelToEMU(0));
if (xssfChart11.getCTChartSpace().getSpPr().getLn().getSolidFill() == null)
xssfChart11.getCTChartSpace().getSpPr().getLn().addNewSolidFill();
if (xssfChart11.getCTChartSpace().getSpPr().getLn().getSolidFill().getSrgbClr() == null)
xssfChart11.getCTChartSpace().getSpPr().getLn().getSolidFill().addNewSrgbClr();
xssfChart11.getCTChartSpace().getSpPr().getLn().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)0,(byte)0,(byte)0});
// Line style of cat axis
if (xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr() == null)
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).addNewSpPr();
if (xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn() == null)
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().addNewLn();
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().setW(Units.pixelToEMU(0));
if (xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().getSolidFill() == null)
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().addNewSolidFill();
if (xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().getSolidFill().getSrgbClr() == null)
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().getSolidFill().addNewSrgbClr();
xssfChart11.getCTChart().getPlotArea().getCatAxArray(0).getSpPr().getLn().getSolidFill().getSrgbClr()
.setVal(new byte[]{(byte)255,(byte)255,(byte)255});
//Line style of val axis
if (xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr() == null)
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).addNewSpPr();
if (xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn() == null)
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().addNewLn();
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().setW(Units.pixelToEMU(0));
if (xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().getSolidFill() == null)
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().addNewSolidFill();
if (xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().getSolidFill().getSrgbClr() == null)
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().getSolidFill().addNewSrgbClr();
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).getSpPr().getLn().getSolidFill().getSrgbClr()
.setVal(new byte[]{(byte)255,(byte)255,(byte)255});
xssfChart11.getCTChart().getPlotArea().getValAxArray(0).addNewMajorGridlines().addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[]{(byte)217,(byte) 217,(byte) 217});
// Line style of the series
for (int i = 0; i < 4; i++) {
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).addNewSpPr();
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().getLn() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().addNewLn();
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i)
.getSpPr().getLn().setW(Units.pixelToEMU(3));
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().getLn().getSolidFill() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().getLn().addNewSolidFill();
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().getLn().getSolidFill().getSrgbClr() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSpPr().getLn().getSolidFill().addNewSrgbClr();
}
// first series clr
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0)
.getSpPr().getLn().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)146,(byte)208,(byte)80});
// second series clr
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1)
.getSpPr().getLn().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)255,(byte)0,(byte)0});
// third series clr
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(2)
.getSpPr().getLn().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)255,(byte)192,(byte)0});
// fourth series clr
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(3)
.getSpPr().getLn().getSolidFill().getSrgbClr().setVal(new byte[]{(byte)64,(byte)114,(byte)196});
// set line data series to not smooth the line
for (int i = 0; i < 4; i++) {
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSmooth() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).addNewSmooth();
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getSmooth().setVal(false);
}
// set or unset tick marks
for (int i = 1; i < 4; i++) {
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getMarker() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).addNewMarker();
if (xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getMarker().getSymbol() == null)
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(i).getMarker().addNewSymbol();
}
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(0).getMarker().getSymbol().setVal(
org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle.NONE);
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(1).getMarker().getSymbol().setVal(
org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle.NONE);
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(2).getMarker().getSymbol().setVal(
org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle.NONE);
xssfChart11.getCTChart().getPlotArea().getLineChartArray(0).getSerArray(3).getMarker().getSymbol().setVal(
org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle.NONE);
CTPlotArea plotArea11 = xssfChart11.getCTChart().getPlotArea();
plotArea11.getLineChartArray()[0].getSmooth();
AxisTickMark.values();
CTBoolean ctBool11 = CTBoolean.Factory.newInstance();
ctBool11.setVal(false);
plotArea11.getLineChartArray()[0].setSmooth(ctBool11);
for (CTLineSer ser : plotArea11.getLineChartArray()[0].getSerArray()) {
ser.setSmooth(ctBool11);
}