Apache POIを使用して2つのCategoryAxisを含むLineChartを作成する方法

SilverZion:

(スクリーンショットのように)ノードポイントの数が異なる両方の依存関係を比較するExcel LineChartを作成しようとしています。グラフに軸を1つ追加しようとしましたが、この方法では結果が得られません。どのようにして問題を解決することができますか?

次のようになります。 このようになります

ChartLegend legend2 = chart2.getOrCreateLegend();
legend2.setPosition(LegendPosition.RIGHT);
LineChartData data2 = chart2.getChartDataFactory().createLineChartData();
ChartAxis bottomAxis = chart2.getChartAxisFactory().createCategoryAxis(AxisPosition.BOTTOM);
ChartAxis topAxis = chart2.getChartAxisFactory().createCategoryAxis(AxisPosition.TOP);
ValueAxis leftAxis = chart2.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
ChartDataSource<String> xs = DataSources.fromStringCellRange(sheet, new CellRangeAddress(1, 350, 4, 4));
ChartDataSource<String> xs1 = DataSources.fromStringCellRange(sheet, new CellRangeAddress(1, 10, 7, 7));
ChartDataSource<Number> ys1 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 350, 5, 5));
ChartDataSource<Number> ys2 = DataSources.fromNumericCellRange(sheet, new CellRangeAddress(1, 10, 8, 8));
LineChartSeries series1 = data2.addSeries(xs, ys1);
series1.setTitle("1");
LineChartSeries series2 = data2.addSeries(xs1, ys2);
series2.setTitle("2");
chart2.plot(data2, topAxis, bottomAxis, leftAxis);

XSSFChart xssfChart = (XSSFChart) chart2;
CTPlotArea plotArea = xssfChart.getCTChart().getPlotArea();
plotArea.getLineChartArray()[0].getSmooth();
CTBoolean ctBool = CTBoolean.Factory.newInstance();
ctBool.setVal(false);
plotArea.getLineChartArray()[0].setSmooth(ctBool);
for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) {
    ser.setSmooth(ctBool);
}
CTMarker ctMarker = CTMarker.Factory.newInstance();
ctMarker.setSymbol(CTMarkerStyle.Factory.newInstance());
for (CTLineSer ser : plotArea.getLineChartArray()[0].getSerArray()) {
    ser.setMarker(ctMarker);
アクセルリヒター:

たびOOXMLチャートは複数の軸を持って、その後、チャートにもプロットエリア内で複数のグラフのデータを必要とします。そして、すべての軸はペアである必要があります。一部の軸は非表示になっている場合がありますが、そこにある必要があります。

コードは古いapache poiクラスを使用していますが、これらは非推奨であり、次のバージョンで削除されます。現在のapache poiバージョンを使用した完全な例を次に示し4.1.0ます。

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xddf.usermodel.*;
import org.apache.poi.xddf.usermodel.chart.*;

public class XSSFLineChartTwoCatAxes {

 public static void main(String[] args) throws IOException {
  try (XSSFWorkbook wb = new XSSFWorkbook()) {
   XSSFSheet sheet = wb.createSheet("linechart");

   // create data
   Row row;
   Cell cell;
   for (int rowIndex = 0; rowIndex < 4; rowIndex++) {
    row = sheet.createRow((short) rowIndex);
    if (rowIndex == 0) {
     cell = row.createCell(0);
     cell.setCellValue("CatA");
     for (int colIndex = 1; colIndex < 32; colIndex++) {
      cell = row.createCell((short) colIndex);
      cell.setCellValue(colIndex + (colIndex-1)*11);
     }
    } else if (rowIndex == 1) {
     cell = row.createCell(0);
     cell.setCellValue("ValA");
     for (int colIndex = 1; colIndex < 32; colIndex++) {
      cell = row.createCell((short) colIndex);
      cell.setCellValue(new java.util.Random().nextDouble() * 8 + 1);
     }
    } else if (rowIndex == 2) {
     cell = row.createCell(0);
     cell.setCellValue("CatB");
     for (int colIndex = 1; colIndex < 14; colIndex++) {
      cell = row.createCell((short) colIndex);
      cell.setCellValue(colIndex);
     }
    } else if (rowIndex == 3) {
     cell = row.createCell(0);
     cell.setCellValue("ValB");
     for (int colIndex = 1; colIndex < 14; colIndex++) {
      cell = row.createCell((short) colIndex);
      cell.setCellValue(new java.util.Random().nextDouble() * 8 + 1);
     }
    }
   }

   // creata anchor
   XSSFDrawing drawing = sheet.createDrawingPatriarch();
   XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 15, 25);

   // create chart
   XSSFChart chart = drawing.createChart(anchor);

   // create data sources
   XDDFDataSource<Double> cat1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 1, 31));
   XDDFNumericalDataSource<Double> val1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 1, 31));
   XDDFDataSource<Double> cat2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(2, 2, 1, 13));
   XDDFNumericalDataSource<Double> val2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(3, 3, 1, 13));

   // first line chart

   // create axis
   XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
   XDDFValueAxis rightAxis = chart.createValueAxis(AxisPosition.RIGHT);
   rightAxis.setCrosses(AxisCrosses.MAX);

   // create data and series
   XDDFLineChartData data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);
   XDDFLineChartData.Series series = (XDDFLineChartData.Series) data.addSeries(cat1, val1);
   series.setTitle("CatA", new CellReference(sheet.getSheetName(), 0, 0, true, true));
   series.setSmooth(false);
   series.setMarkerStyle(MarkerStyle.NONE);

   chart.plot(data);

   solidLineSeries(data, 0, PresetColor.BLUE);

   // second line chart

   // create axis
   XDDFCategoryAxis topAxis = chart.createCategoryAxis(AxisPosition.TOP);
   topAxis.setCrosses(AxisCrosses.MAX);
   rightAxis = chart.createValueAxis(AxisPosition.RIGHT);
   rightAxis.setVisible(false); // right axis must be there but can be invisible
   rightAxis.setCrosses(AxisCrosses.MAX);

   // set correct cross axis
   topAxis.crossAxis(rightAxis);
   rightAxis.crossAxis(topAxis);

   // create data and series
   data = (XDDFLineChartData) chart.createData(ChartTypes.LINE, topAxis, rightAxis);
   series = (XDDFLineChartData.Series) data.addSeries(cat2, val2);
   series.setTitle("CatB", new CellReference(sheet.getSheetName(), 2, 0, true, true));
   series.setSmooth(false);
   series.setMarkerStyle(MarkerStyle.NONE);

   chart.plot(data);

   // correct the id and order, must not be 0 again because there is a series already in the other chart
   chart.getCTChart().getPlotArea().getLineChartArray(1).getSerArray(0).getIdx().setVal(1);
   chart.getCTChart().getPlotArea().getLineChartArray(1).getSerArray(0).getOrder().setVal(1);

   solidLineSeries(data, 0, PresetColor.GREEN);

   // create legend
   XDDFChartLegend legend = chart.getOrAddLegend();
   legend.setPosition(LegendPosition.BOTTOM);
   legend.setOverlay(false);

   // Write the output to a file
   try (FileOutputStream fileOut = new FileOutputStream("ooxml-line-chart.xlsx")) {
    wb.write(fileOut);
   }
  }
 }

 private static void solidLineSeries(XDDFChartData data, int index, PresetColor color) {
  XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(color));
  XDDFLineProperties line = new XDDFLineProperties();
  line.setFillProperties(fill);
  XDDFChartData.Series series = data.getSeries().get(index);
  XDDFShapeProperties properties = series.getShapeProperties();
  if (properties == null) {
   properties = new XDDFShapeProperties();
  }
  properties.setLineProperties(line);
  series.setShapeProperties(properties);
 }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

HSSFを使用して既存のExcelの2つの行の間に行を挿入する方法(Apache POI)

分類Dev

Apache_poiを使用して特定のテキストを含むExcel行を削除します

分類Dev

Apache POIを使用してExcelで棒グラフを作成する

分類Dev

Apache POIを使用してExcelチャートを作成する

分類Dev

[ApacheのPOI]を使用して、リストダウン依存のドロップを作成する方法

分類Dev

Apache POIを使用して特定のExcel列を読み取る方法

分類Dev

Apache POIを使用してHSSFWorkbookをXSSFWorkbookに変換する方法

分類Dev

Apache POIを使用してaltChunk要素をXWPFDocumentに追加する方法

分類Dev

Apache POI を使用して上付き文字を追加する方法

分類Dev

Apache POIを使用してすべてのセル値を読み取る方法

分類Dev

Apache Poiを使用して子の形状の絶対位置を取得する方法

分類Dev

Apache poiを使用してExcelセルに常に2つの小数点を表示する

分類Dev

Apache Poi-Java-:Apache POIを使用してWord文書に個別の段落として空白行を含むテキストを追加するにはどうすればよいですか?

分類Dev

Apache POI XSSFを使用して右から左に配置するシートを作成する方法

分類Dev

Apache POIを使用してExcelでピボットテーブルを作成する方法はありますか?

分類Dev

Apache Sparkを使用して、データに\ nを含むCSVを解析する方法は?

分類Dev

Apache POIを使用して数式セルをキャッシュする方法

分類Dev

apache poi 3.1を使用して数式セル値(データ)を取得する方法

分類Dev

Apache POI を使用して Excel から通貨コードを取得する方法は?

分類Dev

Apache POIを使用してExcelセルに番号を書き込む

分類Dev

HUEを使用してCDH(Apache Hadoopを含むClouderaのディストリビューション)バージョンを見つける方法

分類Dev

apache poiを使用して、空でないすべての行をループする方法は?

分類Dev

Java Apache POIを使用してExcelシートで次の未使用の行を非表示にする方法

分類Dev

Java Apache POIを使用してExcelに行を挿入する

分類Dev

Apache POIを使用して日付形式を設定する

分類Dev

Apache POIを使用してExcelシートを削除する

分類Dev

Apache POIを使用してExcelでセルを結合する

分類Dev

Apache POIを使用してExcelシートをコピーする

分類Dev

APACHE POIを使用して、同じ行の異なる列に値を印刷する

Related 関連記事

  1. 1

    HSSFを使用して既存のExcelの2つの行の間に行を挿入する方法(Apache POI)

  2. 2

    Apache_poiを使用して特定のテキストを含むExcel行を削除します

  3. 3

    Apache POIを使用してExcelで棒グラフを作成する

  4. 4

    Apache POIを使用してExcelチャートを作成する

  5. 5

    [ApacheのPOI]を使用して、リストダウン依存のドロップを作成する方法

  6. 6

    Apache POIを使用して特定のExcel列を読み取る方法

  7. 7

    Apache POIを使用してHSSFWorkbookをXSSFWorkbookに変換する方法

  8. 8

    Apache POIを使用してaltChunk要素をXWPFDocumentに追加する方法

  9. 9

    Apache POI を使用して上付き文字を追加する方法

  10. 10

    Apache POIを使用してすべてのセル値を読み取る方法

  11. 11

    Apache Poiを使用して子の形状の絶対位置を取得する方法

  12. 12

    Apache poiを使用してExcelセルに常に2つの小数点を表示する

  13. 13

    Apache Poi-Java-:Apache POIを使用してWord文書に個別の段落として空白行を含むテキストを追加するにはどうすればよいですか?

  14. 14

    Apache POI XSSFを使用して右から左に配置するシートを作成する方法

  15. 15

    Apache POIを使用してExcelでピボットテーブルを作成する方法はありますか?

  16. 16

    Apache Sparkを使用して、データに\ nを含むCSVを解析する方法は?

  17. 17

    Apache POIを使用して数式セルをキャッシュする方法

  18. 18

    apache poi 3.1を使用して数式セル値(データ)を取得する方法

  19. 19

    Apache POI を使用して Excel から通貨コードを取得する方法は?

  20. 20

    Apache POIを使用してExcelセルに番号を書き込む

  21. 21

    HUEを使用してCDH(Apache Hadoopを含むClouderaのディストリビューション)バージョンを見つける方法

  22. 22

    apache poiを使用して、空でないすべての行をループする方法は?

  23. 23

    Java Apache POIを使用してExcelシートで次の未使用の行を非表示にする方法

  24. 24

    Java Apache POIを使用してExcelに行を挿入する

  25. 25

    Apache POIを使用して日付形式を設定する

  26. 26

    Apache POIを使用してExcelシートを削除する

  27. 27

    Apache POIを使用してExcelでセルを結合する

  28. 28

    Apache POIを使用してExcelシートをコピーする

  29. 29

    APACHE POIを使用して、同じ行の異なる列に値を印刷する

ホットタグ

アーカイブ