在折线图中获取峰值,Apache POI

时间:2018-08-16 05:41:27

标签: java excel apache-poi

我已经使用Apache POI生成了折线图。我的图表如下所示。enter image description here

我需要在图表中显示蓝色系列(系列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);
           }

0 个答案:

没有答案