0

我正在使用 apache poi 在 excel 中生成折线图。我有两组数据,效果不错,请看图1。

图片1 在此处输入图像描述

当我只使用一组数据时,它会生成图片2,你可以看到图片的右侧,它显示了中国、美国和日本。这不是我想要的,它应该只在右侧显示一个序列。我怎样才能解决这个问题?

图2 在此处输入图像描述

行家

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.1</version>
        </dependency>

爪哇代码

public static void test() throws Exception {
        try (XSSFWorkbook wb = new XSSFWorkbook()) {

            String sheetName = "CountryLineChart";

            XSSFSheet sheet = wb.createSheet(sheetName);

            XSSFDrawing drawing = sheet.createDrawingPatriarch();
            XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 4, 7, 26);

            XSSFChart chart = drawing.createChart(anchor);
            chart.setTitleText("Area-wise Top Seven Countries");
            chart.setTitleOverlay(false);

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

            XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
            bottomAxis.setTitle("Country");
            XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
            leftAxis.setTitle("Area & Population");

            XDDFDataSource<String> countries = XDDFDataSourcesFactory.fromArray(new String[] { "china", "usa", "japan" });

            XDDFNumericalDataSource<Double> area = XDDFDataSourcesFactory.fromArray(new Double[] { 12d, 22d, 12d });

            XDDFNumericalDataSource<Double> population = XDDFDataSourcesFactory.fromArray(new Double[] { 33d, 12d, 16d });

            XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);

            XDDFLineChartData.Series series1 = (XDDFLineChartData.Series) data.addSeries(countries, area);
            series1.setTitle("Area", null);
            series1.setSmooth(false);
            series1.setMarkerStyle(MarkerStyle.STAR);

            // if comment these code, it generate line chart like picture2
            // ===========================================================================
            XDDFLineChartData.Series series2 = (XDDFLineChartData.Series) data.addSeries(countries, population);
            series2.setTitle("Population", null);
            series2.setSmooth(true);
            series2.setMarkerStyle(MarkerStyle.SQUARE);
            // ===========================================================================

            chart.plot(data);

            // Write output to an excel file
            String filename = "/Users/jiangxingshang/Downloads/tmp/line-chart.xlsx";
            try (FileOutputStream fileOut = new FileOutputStream(filename)) {
                wb.write(fileOut);
            }
        }
    }
4

0 回答 0