如何命令条形图放置在刻度线之间?

Chieve:

我在下面的图片中添加了我想要的示例。

这就是我得到的。 我得到什么

这就是我要的。 我想要的是

我一直在图书馆中搜索,以尝试找到可以进行此更改的内容,但我似乎找不到。

或者,是否有方法在顶部或底部添加填充?主要问题是我不希望有条形图触及图表的顶部或底部边框。

这是一个XDDFChart,这是相关代码。

  XDDFCategoryAxis leftAxis = chart.createCategoryAxis(AxisPosition.LEFT);
  leftAxis.setTitle("Name");


  XDDFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
  bottomAxis.setTitle("Volume");
阿克塞尔·里希特(Axel Richter):

在条形图中,值轴应已设置crossBetween val="between",因此值轴与类别之间的类别轴交叉。其他的第一个和最后一个类别恰好在交叉点上,条形图只有一半可见。

也左轴绝不会类别轴和底部轴线从不将是价值轴,即使没有为条形图,其显示BarDirection.BAR的代替BarDirection.COL那里XDDFBarChartData的杆方向是不同的。轴保持不变。

因此XDDFChart,一般而言,拥有的酒吧BarDirection.BAR应该像这样:

...
// create axis
XDDFCategoryAxis categoryAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
categoryAxis.setTickLabelPosition(AxisTickLabelPosition.NONE);
XDDFValueAxis valueAxis = chart.createValueAxis(AxisPosition.LEFT);
valueAxis.setCrosses(AxisCrosses.AUTO_ZERO);
// Set AxisCrossBetween, so the left axis crosses the category axis between the categories.
// Else first and last category is exactly on cross points and the bars are only half visible.
valueAxis.setCrossBetween(AxisCrossBetween.BETWEEN);

// create chart data
XDDFBarChartData data = (XDDFBarChartData)chart.createData(ChartTypes.BAR, categoryAxis, valueAxis);
data.setBarDirection(BarDirection.BAR);
 ...

XWPFChartWord文档中创建的完整示例

import java.io.*;

import org.apache.poi.xwpf.usermodel.*;

import org.apache.poi.ss.util.*;
import org.apache.poi.util.Units;

import org.apache.poi.xddf.usermodel.*;
import org.apache.poi.xddf.usermodel.chart.*;

import org.apache.poi.xssf.usermodel.*;

public class CreateWordXDDFChart {

 // methode to set title in the data sheet without creating a Table but using the sheet data only
 // creating a Table is not really necessary
 static CellReference setTitleInDataSheet(XDDFChart chart, String title, int column) throws Exception {
  XSSFWorkbook workbook = chart.getWorkbook();
  XSSFSheet sheet = workbook.getSheetAt(0);
  XSSFRow row = sheet.getRow(0); if (row == null) row = sheet.createRow(0);
  XSSFCell cell = row.getCell(column); if (cell == null) cell = row.createCell(column);
  cell.setCellValue(title);
  return new CellReference(sheet.getSheetName(), 0, column, true, true);
 }

 // methode to fill a series data into the underlying sheet
 static void fillSheet(XDDFChart chart, XDDFDataSource<?> categoryData, XDDFNumericalDataSource<?> valuesData) throws Exception {
  XSSFWorkbook workbook = chart.getWorkbook();
  XSSFSheet sheet = workbook.getSheetAt(0);
  int numOfPoints = categoryData.getPointCount();
  for (int i = 0; i < numOfPoints; i++) {
   XSSFRow row = sheet.getRow(i + 1); if (row == null) row = sheet.createRow(i + 1); // first row is for title
   XSSFCell cell = row.getCell(categoryData.getColIndex()); if (cell == null) cell = row.createCell(categoryData.getColIndex());
   cell.setCellValue(categoryData.getPointAt(i).toString());
   cell = row.getCell(valuesData.getColIndex()); if (cell == null) cell = row.createCell(valuesData.getColIndex());
   cell.setCellValue(valuesData.getPointAt(i).doubleValue());
  }
 }

 public static void main(String[] args) throws Exception {
  try (XWPFDocument document = new XWPFDocument()) {

   // create the data
   String[] categories = new String[]{"C1", "C2", "C3"};
   Double[] valuesA = new Double[]{300d, 20d, 10d};

   // create the chart
   XWPFChart chart = document.createChart(15*Units.EMU_PER_CENTIMETER, 10*Units.EMU_PER_CENTIMETER);

   // create data sources
   int numOfPoints = categories.length;
   String categoryDataRange = chart.formatRange(new CellRangeAddress(1, numOfPoints, 0, 0));
   String valuesDataRangeA = chart.formatRange(new CellRangeAddress(1, numOfPoints, 1, 1));
   XDDFDataSource<String> categoriesData = XDDFDataSourcesFactory.fromArray(categories, categoryDataRange, 0);
   XDDFNumericalDataSource<Double> valuesDataA = XDDFDataSourcesFactory.fromArray(valuesA, valuesDataRangeA, 1);

   // create axis
   XDDFCategoryAxis categoryAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
   categoryAxis.setTickLabelPosition(AxisTickLabelPosition.NONE);
   XDDFValueAxis valueAxis = chart.createValueAxis(AxisPosition.LEFT);
   valueAxis.setCrosses(AxisCrosses.AUTO_ZERO);
   // Set AxisCrossBetween, so the left axis crosses the category axis between the categories.
   // Else first and last category is exactly on cross points and the bars are only half visible.
   valueAxis.setCrossBetween(AxisCrossBetween.BETWEEN);

   // create chart data
   XDDFBarChartData data = (XDDFBarChartData)chart.createData(ChartTypes.BAR, categoryAxis, valueAxis);
   data.setBarDirection(BarDirection.BAR);

   // create series
   data.setVaryColors(true);
   XDDFBarChartData.Series series = (XDDFBarChartData.Series)data.addSeries(categoriesData, valuesDataA);
   // XDDFChart.setSheetTitle is buggy. It creates a Table but only half way and incomplete.
   // Excel cannot opening the workbook after creating that incomplete Table.
   // So updating the chart data in Word is not possible.
   //series.setTitle("Ser1", chart.setSheetTitle("Ser1", 1));
   series.setTitle("Ser1", setTitleInDataSheet(chart, "Ser1", 1));
   // since apache oi 4.1.1 XDDFChart does not fill the series in the sheet while plot. Apache poi 4.1.0 had done this: https://svn.apache.org/viewvc/poi/tags/REL_4_1_0/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java?view=markup#l363
   // so we need doing this for each series now
   fillSheet(chart, categoriesData, valuesDataA);

   // plot chart data
   chart.plot(data);

   // Write the output to a file
   try (FileOutputStream fileOut = new FileOutputStream("CreateWordXDDFChart.docx")) {
    document.write(fileOut);
   }
  }
 }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在刻度线之间对齐条形图中的条形(matplotlib)?

如何在条形图上正确放置条形图

如何将 R barplot() 中的条形居中放置在刻度周围

R:调整条形图刻度之间的间距

d3中条形图的轴和矩形刻度线的刻度未对齐

条形图的条形图之间的d3js网格线

如何在ZingChart中的折线图和条形图之间对齐垂直参考线?

如何制作一个在刻度线的两个值之间跳动的函数?

ChartJS 在刻度之间放置 y 轴标签

将轴文本标签放置在刻度之间

如何在NetLogo中创建条形图,条形图并排放置

如何使用条形图将ggplot(R)中的数字汇总成单个条形来获得可靠的刻度线?

WPF条形图如何在条形之间添加空格?

为什么使用scaleBand的条形图不与刻度线对齐?

在ggplot2的条形图的顶部添加没有标签的刻度线

在ggplot中使用条形图时出现意外的x轴刻度线

MPAndroidChart 如何更改条形图的颜色越过限制线?

如何使用阈值线创建matplotlib条形图?

如何隐藏条形图轴上的线?

如何用线制作分组条形图

如何绘制连接条形图顶部的线

如何在条形图 PowerBI 上获取误差线?

Matplotilb条形图:对角刻度标签

对数刻度中的Seaborn条形图

重新排列堆叠的条形图图例标签而不更改 R 中的图(并修复刻度线)

如何使刻度线与条形线的宽度相同

如何删除分组条形图之间的空格

如何减少分组的堆叠条形图之间的空白

如何在条形图之间添加距离线