[]
        
(Showing Draft Content)

配置图表系列

GcExcel Java允许用户通过以下方式配置图表系列允许用户通过以下方式配置图表系列允许用户通过以下方式配置图表系列:

数据点

GcExcel Java 中的Points集合用于表示特定序列中的所有点, IPoints 接口的indexer表示法用于获取序列中的特定点。 此外,还可以使用 IPoint 接口的  getDataLabel 方法来获取特定点的数据标签。

设置数据点的格式

要为工作表中添加的图表设置数据点格式,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 250, 20, 360, 230);
worksheet.getRange("A1:D6").setValue(
        new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 }, { "Item2", -51, -36, 27 },
                { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 }, { "Item5", 23, 69, 69 } });
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);
ISeries series1 = shape.getChart().getSeriesCollection().get(0);
        
series1.getPoints().get(2).getFormat().getFill().getColor().setRGB(Color.FromArgb(0, 176, 240));
series1.getPoints().get(2).getFormat().getLine().getColor().setRGB(Color.GetBlue());

为饼图的饼图配置辅助部分

可以使用 IPoint 接口的 setSecondaryPlot 方法来设置点是否位于饼图的饼图或条形饼图的辅助部分。

要为饼图的饼图配置辅助部分,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.PieOfPie, 250, 20, 360, 230);
worksheet.getRange("A1:D6").setValue(
        new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 }, { "Item2", -51, -36, 27 },
                { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 }, { "Item5", 23, 69, 69 } });
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);
        
ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);
        
shape.getChart().getChartGroups().get(0).setSplitType(ChartSplitType.SplitByCustomSplit);
series1.getPoints().get(0).setSecondaryPlot(true);
series1.getPoints().get(1).setSecondaryPlot(false);
series1.getPoints().get(2).setSecondaryPlot(true);
series1.getPoints().get(3).setSecondaryPlot(false);
series1.getPoints().get(4).setSecondaryPlot(true);

数据标签

可以使用DataLabels集合来表示特定系列的所有数据标签的集合。

IDataLabel 接口的 getFormat 方法可用于为特定系列的所有数据标签设置字体样式、填充、线条和三维格式。

设置系列的所有数据标签和特定数据标签格式

要设置系列的所有数据标签和特定数据标签格式,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 250, 20, 360, 230);
worksheet.getRange("A1:B5").setValue(
        new Object[][] { { null, "S1" }, { "Item1", -20 }, { "Item2", 30 }, { "Item3", 50 }, { "Item3", 40 } });
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:B5"), RowCol.Columns, true, true);
        
ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);
        
// set series1's all data label's format.
series1.getDataLabels().getFormat().getFill().getColor().setRGB(Color.GetPink());
series1.getDataLabels().getFormat().getLine().getColor().setRGB(Color.GetGreen());
series1.getDataLabels().getFormat().getLine().setWeight(1);

// set series1's specific data label's format.
series1.getDataLabels().get(2).getFormat().getFill().getColor().setRGB(Color.GetLightGreen());
series1.getPoints().get(2).getDataLabel().getFormat().getLine().getColor().setRGB(Color.GetGray());
series1.getPoints().get(2).getDataLabel().getFormat().getLine().setWeight(2);

自定义数据标签文本

要根据您的选择设置数据标签的文本,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 250, 20, 360, 230);
worksheet.getRange("A1:B5").setValue(new Object[][] { { null, "S1", "S2" }, { "Item1", -20 }, { "Item2", 30 },
        { "Item3", 50 }, { "Item3", 40 } });
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:B5"), RowCol.Columns, true, true);
ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);

// customize data label's text.
series1.getDataLabels().setShowCategoryName(true);
series1.getDataLabels().setShowSeriesName(true);
series1.getDataLabels().setShowLegendKey(true);

type=warning

注意:在 7.0 版本中,IDataLabel 接口的 getParent 方法的返回值从 IPoint 更改为 Object,这将导致现有项目中编译失败或运行时错误。若要避免这种情况,必须将对象显式转换为 IPoint,如下所示:

// Following will cause a compilation error.
IPoint pt = series1.getDataLabels().get(0).getParent();

// Add explicit conversion to IPoint.
IPoint pt = (IPoint)series1.getDataLabels().get(0).getParent();

趋势线

GcExcel Java中的趋势线集合用于表示特定序列的趋势线集合。可以使用 ITrendlines 接口的  get 方法为特定系列创建新的趋势线。此外,可以使用ITrendlines接口的索引符号来获取特定的趋势线。

为系列添加趋势线并配置其样式

要为系列添加趋势线并配置其样式,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.getTrendlines().add();
series1.getTrendlines().get(0).setType(TrendlineType.Linear);
series1.getTrendlines().get(0).setForward(5);
series1.getTrendlines().get(0).setBackward(0.5);
series1.getTrendlines().get(0).setIntercept(2.5);
series1.getTrendlines().get(0).setDisplayEquation(true);
series1.getTrendlines().get(0).setDisplayRSquared(true);

为一个系列添加两条趋势线

要为一个系列添加两条趋势线,请参阅以下代码示例。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.getTrendlines().add();
series1.getTrendlines().get(0).setType(TrendlineType.Linear);
series1.getTrendlines().get(0).setForward(5);
series1.getTrendlines().get(0).setBackward(0.5);
series1.getTrendlines().get(0).setIntercept(2.5);
series1.getTrendlines().get(0).setDisplayEquation(true);
series1.getTrendlines().get(0).setDisplayRSquared(true);

series1.getTrendlines().add();
series1.getTrendlines().get(1).setType(TrendlineType.Polynomial);
series1.getTrendlines().get(1).setOrder(3);

设置趋势线的名称

您还可以使用ITrendline界面的setName方法在GcExcel中设置趋势线的名称。趋势线的名称也可以导出为PDF文档。

请参阅以下示例代码以在GcExcel中设置趋势线的名称。

// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Add a chart
IShape columnChart = worksheet.getShapes().addChart(ChartType.ColumnClustered, 300, 10, 300, 300);       
        
worksheet.getRange("A1:D6").setValue(new Object[][] 
{
{null, "S1", "S2", "S3"},
{"Item1", 10, 25, 25},
{"Item2", -51, -36, 27},
{"Item3", 52, -85, -30},
{"Item4", 22, 65, 65},
{"Item5", 23, 69, 69}
});

// Add series
columnChart.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

// Get first series
ISeries series1 = columnChart.getChart().getSeriesCollection().get(0);

// Add a trend line
ITrendline trendline = series1.getTrendlines().add();

// Set trend line's name.
trendline.setName("Theoretical data");

//save to an excel file
workbook.save("TrendLineName.xlsx");

设置趋势线的标签格式

您还可以使用 ITrendline 接口中的 getDataLabel 方法格式化趋势线方程标签并将其导出为 PDF 文档、HTML 文件或图像,该方法获取与趋势线关联的数据标签。仅当 ITrendline 接口的 setDisplayEquation setDisplayRSquared 为 true 时,getDataLabel 才会返回值。如果两者都为 false,则 getDataLabel 方法将返回 null。

可以使用 IDataLabel 接口的 getFont、getFormat、getNumberFormatgetOrientationgetDirection getAutoText 方法来格式化趋势线方程标签。GcExcel 还提供了 delete 方法来删除趋势线方程标签。

参考以下示例代码设置趋势线数据标签的格式:

// Initialize Workbook.
IWorkbook workbook = new Workbook();

// Create a worksheet.
IWorksheet worksheet = workbook.getWorksheets().get(0);

// Add XYScatter chart.
IShape shape = worksheet.getShapes().addChart(ChartType.XYScatter, 250, 20, 360, 230);
worksheet.getRange("A1:C11").setValue(new Object[][] {
    { null, "Mktng Exp", "Revenue" },
    { "Company 1", 1849, 2911 },
    { "Company 2", 2708, 5777 },
    { "Company 3", 3474, 8625 },
    { "Company 4", 4681, 9171 },
    { "Company 5", 5205, 10308 },
    { "Company 6", 5982, 11779 },
    { "Company 7", 8371, 12138 },
    { "Company 8", 8457, 17074 },
    { "Company 9", 9554, 15729 },
    { "Company 10", 9604, 19610 }
    });
shape.getChart().getSeriesCollection().add(worksheet.getRange("B1:C11"), RowCol.Columns, true, true);
ISeries series1 = shape.getChart().getSeriesCollection().get(0);

// Add Trendline.
ITrendline trendline = series1.getTrendlines().add();
trendline.setType(TrendlineType.Linear);

// Display equation for the trendline.
trendline.setDisplayEquation(true);

// Format datalabel for trendline.
IDataLabel trendlineDataLabel = trendline.getDataLabel();
trendlineDataLabel.getFont().getColor().setRGB(Color.GetPurple());
trendlineDataLabel.getFont().setSize(11);
trendlineDataLabel.getFormat().getFill().getColor().setObjectThemeColor(ThemeColor.Accent4);
trendlineDataLabel.getFormat().getLine().getColor().setObjectThemeColor(ThemeColor.Accent2);

// Set paper size for PDF export.
worksheet.getPageSetup().setPaperSize(PaperSize.A3);

// Save the workbook.
workbook.save("DataLabelTrendline.xlsx");

// Export the workbook as a PDF document.
workbook.save("DataLabelTrendline.pdf");

getParent 方法 (ITrendline.getDataLabel().getParent()) 将返回指定趋势线的父对象。其返回值类型是以 ITrendline 作为返回值的对象。

ITrendline trendline = (ITrendline)trendline.getDataLabel().getParent();

type=warning

注意:趋势线方程标签不支持 IDataLabel 接口的以下方法,因此,调用它们将引发 NotSupportedException:

  • getPosition

  • getSeparator

  • getShowBubbleSize

  • getShowCategoryName

  • getShowLegendKey

  • getShowPercentage

  • getShowSeriesName

  • getShowValue

  • getNumberFormatLinked

  • getTextFrame

限制:

SpreadJS只支持默认的方程和 R 值。因此,GcExcel 无法将趋势线数据格式导出为 SSJSON 和 SJS。

图表组

图表组具有一个或多个系列的公共设置。通常,它是一组特定的特色系列。

用一个系列为柱状图设置不同的颜色

要为柱形图(仅包含一个系列)设置不同的颜色,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getSeriesCollection().get(2).delete();
shape.getChart().getSeriesCollection().get(1).delete();
        
// Chart's series count is 1.
// int count = shape.getChart().getSeriesCollection().getCount();
shape.getChart().getSeriesCollection().getCount();
        
// set vary colors for column chart which only has one series.
shape.getChart().getColumnGroups().get(0).setVaryByCategories(true);

为饼图的饼图设置拆分设置和间距宽度

要为饼图的饼图设置分割设置和间距宽度,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.PieOfPie, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);

shape.getChart().getPieGroups().get(0).setSplitType(ChartSplitType.SplitByValue);
shape.getChart().getPieGroups().get(0).setSplitValue(20);
shape.getChart().getPieGroups().get(0).setGapWidth(350);

设置柱状图和重叠的间隙宽度

要设置柱状图的间隙宽度以及重叠,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnClustered, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);

shape.getChart().getColumnGroups().get(0).setGapWidth(120);
shape.getChart().getColumnGroups().get(0).setOverlap(-20);

配置气泡图的布局

为了根据您的偏好配置气泡图的布局,请参考以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.Bubble, 250, 20, 360, 230);
Object[][] data = new Object[][] {
    {"Blue", null, null },
    {125, 750, 3 },
    {25, 625, 7 },
    {75, 875, 5 },
    {175, 625, 6},
    {"Red",null,null },
    {125 ,500 , 10 },
    {25, 250, 1 },
    {75, 125, 5 },
    {175, 250, 8 } 
    };
worksheet.getRange("A2:C10").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A2:C5"), RowCol.Columns, true, true);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A7:C10"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);

shape.getChart().getXYGroups().get(0).setBubbleScale(150);
shape.getChart().getXYGroups().get(0).setSizeRepresents(SizeRepresents.SizeIsArea);
shape.getChart().getXYGroups().get(0).setShowNegativeBubbles(true);

配置圆环图的布局

请参阅以下示例代码,以根据您的首选项配置圆环图的布局。

IShape shape = worksheet.getShapes().addChart(ChartType.Doughnut, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

ISeries series1 = shape.getChart().getSeriesCollection().get(0);
series1.setHasDataLabels(true);

shape.getChart().getDoughnutGroups().get(0).setFirstSliceAngle(50);
shape.getChart().getDoughnutGroups().get(0).setDoughnutHoleSize(20);

放置线, 高低线和系列行

可以使用 IChartGroup 接口的方法来配置图表中的放置线, 高低线和系列行。

配置折线图的放置线

要根据您的首选项配置折线图的放置线,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.Line, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getLineGroups().get(0).setHasDropLines(true);
shape.getChart().getLineGroups().get(0).getDropLines().getFormat().getLine().getColor().setRGB(Color.GetRed());

配置折线图的高低线

要根据您的首选项配置折线图的高低线,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.Line, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);

shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getLineGroups().get(0).setHasHiLoLines(true);
shape.getChart().getLineGroups().get(0).getHiLoLines().getFormat().getLine().getColor().setRGB(Color.GetRed());

配置柱状图的系列行

要根据您的首选项配置柱状图的系列行,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.ColumnStacked, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getColumnGroups().get(0).setHasSeriesLines(true);
shape.getChart().getColumnGroups().get(0).getSeriesLines().getFormat().getLine().getColor()
        .setRGB(Color.GetRed());

为饼图配置连接线

要根据您的首选项配置饼图的连接线,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.PieOfPie, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getPieGroups().get(0).setHasSeriesLines(true);
shape.getChart().getPieGroups().get(0).getSeriesLines().getFormat().getLine().getColor().setRGB(Color.GetRed());

上下条

您可以使用IChartGroup接口的方法,根据您的首选项配置上栏和下栏的样式。

配置折线图的上下条形图

要根据您的首选项配置折线图的上下条形图,请参阅以下示例代码。

IShape shape = worksheet.getShapes().addChart(ChartType.Line, 200, 30, 300, 300);
Object[][] data = new Object[][] { { null, "S1", "S2", "S3" }, { "Item1", 10, 25, 25 },
        { "Item2", -51, -36, 27 }, { "Item3", 52, -85, -30 }, { "Item4", 22, 65, 65 },
        { "Item5", 23, 69, 69 } };
worksheet.getRange("A1:D6").setValue(data);
shape.getChart().getSeriesCollection().add(worksheet.getRange("A1:D6"), RowCol.Columns, true, true);

shape.getChart().getLineGroups().get(0).setHasUpDownBars(true);
shape.getChart().getLineGroups().get(0).getUpBars().getFormat().getFill().getColor().setRGB(Color.GetGreen());
shape.getChart().getLineGroups().get(0).getDownBars().getFormat().getFill().getColor().setRGB(Color.GetRed());