Android 프레젠테이션에서 차트 데이터 시리즈 관리
개요
차트는 플롯된 값을 워크북 셀에 저장하거나 직접 숫자 리터럴로 저장할 수 있습니다. IChartSeries은 관련 값 집합을 나타내며, 각 IChartDataPoint은 해당 시리즈의 점을 나타냅니다. IChartCategory 객체는 시리즈가 공유하는 레이블 또는 그룹화 값을 제공합니다. 기본 데이터로 만든 차트에서는 시리즈 이름, 카테고리 및 점 값이 차트 워크북의 IChartDataCell 객체를 사용합니다.
전형적인 범주형 차트의 경우, 기본 워크북은 행 0을 시리즈 이름에, 열 0을 카테고리 이름에 사용하고 나머지 셀을 시리즈 값에 사용합니다. IChartDataWorkbook.getCell에 전달되는 워크시트, 행 및 열 인덱스는 0부터 시작합니다. 이 레이아웃은 기본 데이터로 차트를 만들 때 유용하지만, 모든 기존 차트가 이를 사용한다고 가정해서는 안 됩니다. 로드된 프레젠테이션의 경우, 워크북 값을 변경하기 전에 시리즈, 카테고리 및 데이터 포인트가 참조하는 셀을 확인하십시오.
차트 설정에는 세 가지 다른 범위가 있습니다:
- 시리즈 수준 설정, 예: IChartSeries.getFormat은 하나의 시리즈에 있는 모든 점에 대한 기본 모양을 제공합니다.
- 데이터 포인트 설정, 예: IChartDataPoint.getFormat은 하나의 점에 대해 시리즈 모양을 재정의합니다.
- 그룹 설정은 동일한 IChartSeriesGroup에 속하는 호환 시리즈에 적용됩니다. 겹침이나 간격 너비와 같은 옵션을 설정해야 할 때는 IChartSeries.getParentSeriesGroup을 통해 그룹에 접근하십시오.
명시적인 점이나 시리즈 채우기가 설정되지 않은 경우, 차트 스타일과 테마가 자동 외관을 결정합니다. 시리즈와 점 서식이 모두 존재하면, 해당 점에 대해서는 점 서식이 우선합니다.

숫자 리터럴을 사용하여 시리즈 값 설정
시리즈 값이 애플리케이션 데이터나 계산에서 나오고 워크시트 셀 참조가 필요하지 않을 때 숫자 리터럴을 사용합니다. 각 점의 getValue 결과를 setAsLiteralDouble을 통해 할당하기 전에 setDataSourceTypeForValues에 DataSourceType.DoubleLiterals를 지정하십시오.
컬렉션 설정은 해당 시리즈의 모든 점 값의 소스 유형을 제어합니다. 각 점 값의 getDataSourceType 메서드는 선택된 유형을 보고합니다; 컬렉션 설정을 통해 변경하십시오. Worksheet를 사용할 경우 getAsCell을 사용해 참조된 셀에 접근합니다. DoubleLiterals를 사용할 경우 getAsLiteralDouble 또는 setAsLiteralDouble을 사용해 숫자를 직접 읽거나 씁니다.
다음 예제는 기본 시리즈와 카테고리를 가진 열 차트를 만든 다음, 첫 번째 시리즈의 기존 점에 10, 20 등 계산된 값을 할당합니다. 프레젠테이션을 저장하고 다시 열어 저장된 값을 출력합니다.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 300);
IChartSeries series = chart.getChartData().getSeries().get_Item(0);
series.getDataPoints().setDataSourceTypeForValues(DataSourceType.DoubleLiterals);
for (int i = 0; i < series.getDataPoints().size(); i++) {
series.getDataPoints().get_Item(i).getValue().setAsLiteralDouble((i + 1) * 10);
}
presentation.save("numeric_literals.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Presentation reopenedPresentation = new Presentation("numeric_literals.pptx");
try {
ISlide reopenedSlide = reopenedPresentation.getSlides().get_Item(0);
IChart reopenedChart = (IChart) reopenedSlide.getShapes().get_Item(0);
IChartSeries reopenedSeries = reopenedChart.getChartData().getSeries().get_Item(0);
for (IChartDataPoint point : reopenedSeries.getDataPoints()) {
System.out.println(point.getValue().getAsLiteralDouble());
}
} finally {
reopenedPresentation.dispose();
}
점 값 소스 유형은 차트의 내부 또는 외부 워크북 구성을 식별하는 IChartData.getDataSourceType와 별개입니다. 숫자 리터럴을 사용한다고 해서 워크북 자체가 제거되는 것은 아닙니다. 이 예제에서는 워크북이 카테고리 레이블, 시리즈 이름 및 다른 시리즈에 계속 사용됩니다. 워크북 관리에 대해서는 Chart Workbook를 참고하십시오.
산점도와 버블 차트의 경우, setDataSourceTypeForXValues와 setDataSourceTypeForYValues를 사용해 getXValue와 getYValue의 소스를 선택합니다. 버블 차트는 또한 setDataSourceTypeForBubbleSizes를 사용해 getBubbleSize의 소스를 지정합니다. 각 해당 소스를 DoubleLiterals로 설정한 뒤, 해당 값의 setAsLiteralDouble 메서드로 숫자를 할당하십시오.
차트 시리즈 겹침 설정
IChartSeries.getOverlap은 2D 차트에서 막대 또는 열이 -100%에서 100%까지 겹치는 정도를 보고합니다. 이는 상위 시리즈 그룹에 대한 설정의 읽기 전용 투사값입니다. 해당 그룹의 모든 호환 시리즈를 업데이트하려면 IChartSeriesGroup.setOverlap를 사용하십시오. 이 옵션은 그룹화된 막대 또는 열을 표시하는 차트 유형에 적용되며, 조합 차트에서 다른 시리즈 그룹에는 영향을 주지 않습니다.
다음 예제는 첫 번째 시리즈가 포함된 그룹의 겹침을 설정합니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final byte overlapPercent = 30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
// 새 차트는 샘플 시리즈, 카테고리 및 값을 포함합니다.
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getParentSeriesGroup().setOverlap(overlapPercent);
presentation.save("series_overlap.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과:

시리즈 채우기 색상 변경
전체 시리즈의 기본 채우기를 설정하려면 IChartSeries.getFormat을 사용하십시오. 점에 명시적인 채우기가 이미 존재하면 해당 점의 IChartDataPoint.getFormat 설정이 시리즈 채우기를 재정의합니다.
다음 예제는 첫 번째 시리즈에 단색 파란색 채우기를 적용합니다.
import com.aspose.slides.*;
import android.graphics.Color;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(Color.BLUE);
presentation.save("series_color.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과:

시리즈 이름 변경
시리즈 이름은 차트 데이터 워크북에 저장되며 일반적으로 범례에 표시됩니다. 클러스터형 열 차트에 대해 기본 워크북이 생성될 때 셀 B1은 행 0, 열 1에 위치하며 첫 번째 시리즈 이름을 포함합니다. 다음 예제의 명명된 상수는 해당 구조를 명시적으로 보여줍니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int worksheetIndex = 0;
final int seriesNameRowIndex = 0;
final int firstSeriesColumnIndex = 1;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, seriesNameRowIndex, firstSeriesColumnIndex);
seriesNameCell.setValue("Revenue");
presentation.save("series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
또한 IChartSeries.getName이 이미 참조하고 있는 셀을 업데이트할 수도 있습니다. 이 방법은 기존 차트에서 특정 행과 열을 가정하는 것을 피합니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int firstNameCellIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
IChartDataCell seriesNameCell = series.getName().getAsCells().get_Item(firstNameCellIndex);
seriesNameCell.setValue("Revenue");
presentation.save("series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과:

여러 셀에서 이름을 구성하여 시리즈 만들기
제품 이름과 보고 기간이 별도 워크북 셀에 저장된 경우 복합 시리즈 이름이 유용합니다. 예를 들어 B1의 Product A와 C1의 2026을 결합해 두 부분이 소스 셀에 연결된 상태로 단일 시리즈 이름을 만들 수 있습니다.
IChartDataWorkbook.getCellCollection을 사용해 이름 범위를 가져온 다음 해당 컬렉션을 IChartSeriesCollection.add에 전달합니다. skipHiddenCells 인자는 숨겨진 셀을 포함할지 여부를 제어합니다: true이면 제외하고, false이면 포함합니다. 이 예제는 false를 사용해 이름 범위의 모든 셀을 포함합니다.
다음 예제는 하나의 시리즈와 두 개의 데이터 포인트를 가진 프레젠테이션을 만듭니다. 셀 B1:C1은 시리즈 이름만 제공하고, A2:A3은 카테고리 레이블을, B2:B3은 숫자 값을 제공합니다.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 50, 50, 620, 180);
chart.getChartData().getSeries().clear();
chart.getChartData().getCategories().clear();
chart.setLegend(true);
IChartDataWorkbook workbook = chart.getChartData().getChartDataWorkbook();
workbook.clear(0);
// 이 두 셀은 시리즈 이름을 제공합니다.
workbook.getCell(0, 0, 1, "Product A");
workbook.getCell(0, 0, 2, "2026");
IChartCellCollection nameCells = workbook.getCellCollection("Sheet1!$B$1:$C$1", false);
IChartSeries series = chart.getChartData().getSeries().add(nameCells, ChartType.ClusteredColumn);
// 별도의 셀들이 카테고리와 숫자 데이터 포인트를 제공합니다.
IChartDataCell northCategory = workbook.getCell(0, 1, 0, "North");
IChartDataCell southCategory = workbook.getCell(0, 2, 0, "South");
chart.getChartData().getCategories().add(northCategory);
chart.getChartData().getCategories().add(southCategory);
IChartDataCell northValue = workbook.getCell(0, 1, 1, 120);
IChartDataCell southValue = workbook.getCell(0, 2, 1, 150);
series.getDataPoints().addDataPointForBarSeries(northValue);
series.getDataPoints().addDataPointForBarSeries(southValue);
presentation.save("composite_series_name.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과 시리즈 이름은 Product A 2026이며, 두 셀 값 사이에 공백이 포함됩니다. 범례는 두 열에 대해 하나의 항목으로 표시합니다. 아래 이미지는 결과를 보여줍니다.

자동 시리즈 채우기 색상 가져오기
IChartSeries.getAutomaticSeriesColor은 시리즈 인덱스와 차트 스타일을 기반으로 계산된 Android ARGB 색상 정수를 반환합니다. 이는 시리즈 채우기가 명시적으로 정의되지 않았을 때 사용되는 색상입니다. 메서드를 호출하면 계산된 색상을 읽어오며, 새로운 채우기를 할당하지는 않습니다.
다음 예제는 각 기본 시리즈의 자동 색상 정수를 출력합니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
int seriesCount = chart.getChartData().getSeries().size();
for (int seriesIndex = 0; seriesIndex < seriesCount; seriesIndex++) {
IChartSeries series = chart.getChartData().getSeries().get_Item(seriesIndex);
int automaticColor = series.getAutomaticSeriesColor();
System.out.println("Series " + seriesIndex + ": " + automaticColor);
}
} finally {
presentation.dispose();
}
정수 값은 차트 스타일과 테마에 따라 달라집니다.
차트 시리즈에 대해 역색상 채우기 설정
막대, 열 및 버블 시리즈의 경우, IChartSeries.setInvertIfNegative를 사용해 음수 값을 다른 채우기로 표시할 수 있습니다. 일반 시리즈 채우기를 단색으로 설정하고 역전 기능을 활성화한 뒤, IChartSeries.getInvertedSolidFillColor를 통해 음수 값 색상을 지정하십시오. 워크북에 있는 음수 숫자는 변경되지 않으며, 표시 색상만 바뀝니다.
다음 예제는 기본 차트 데이터를 하나의 시리즈로 교체합니다. 워크시트 행 0에 시리즈 이름이, 열 0에 카테고리 이름이, 열 1에 값이 들어 있습니다.
import com.aspose.slides.*;
import android.graphics.Color;
final int firstSlideIndex = 0;
final int worksheetIndex = 0;
final int headerRowIndex = 0;
final int categoryColumnIndex = 0;
final int firstSeriesColumnIndex = 1;
final int firstDataRowIndex = 1;
String[] categoryNames = { "Category 1", "Category 2", "Category 3" };
int[] seriesValues = { -20, 50, -30 };
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartData chartData = chart.getChartData();
IChartDataWorkbook workbook = chartData.getChartDataWorkbook();
chartData.getSeries().clear();
chartData.getCategories().clear();
IChartDataCell seriesNameCell = workbook.getCell(worksheetIndex, headerRowIndex, firstSeriesColumnIndex, "Series 1");
int chartType = chart.getType();
IChartSeries series = chartData.getSeries().add(seriesNameCell, chartType);
for (int categoryIndex = 0; categoryIndex < categoryNames.length; categoryIndex++) {
int dataRowIndex = firstDataRowIndex + categoryIndex;
String categoryName = categoryNames[categoryIndex];
int seriesValue = seriesValues[categoryIndex];
IChartDataCell categoryCell = workbook.getCell(worksheetIndex, dataRowIndex, categoryColumnIndex, categoryName);
chartData.getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(worksheetIndex, dataRowIndex, firstSeriesColumnIndex, seriesValue);
series.getDataPoints().addDataPointForBarSeries(valueCell);
}
int automaticSeriesColor = series.getAutomaticSeriesColor();
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(automaticSeriesColor);
series.setInvertIfNegative(true);
series.getInvertedSolidFillColor().setColor(Color.RED);
presentation.save("inverted_solid_fill_color.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과:

점별로 역전 기능을 활성화하려면 IChartDataPoint.setInvertIfNegative를 사용할 수 있습니다. 아래 예제에서는 시리즈에 대한 역전이 비활성화되고 선택된 점에만 활성화됩니다. 해당 점에는 효과를 확인할 수 있도록 음수 값도 할당됩니다.
import com.aspose.slides.*;
import android.graphics.Color;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int targetDataPointIndex = 2;
final int negativeValue = -30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
int automaticSeriesColor = series.getAutomaticSeriesColor();
series.getFormat().getFill().setFillType(FillType.Solid);
series.getFormat().getFill().getSolidFillColor().setColor(automaticSeriesColor);
series.getInvertedSolidFillColor().setColor(Color.RED);
series.setInvertIfNegative(false);
IChartDataPoint dataPoint = series.getDataPoints().get_Item(targetDataPointIndex);
dataPoint.getValue().getAsCell().setValue(negativeValue);
dataPoint.setInvertIfNegative(true);
presentation.save("data_point_invert_color_if_negative.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
특정 데이터 포인트 값 삭제
다른 점을 제거하지 않고 하나의 점을 비워 두려면 해당 백업 워크북 셀을 null로 설정합니다. 열 차트의 경우 플롯된 값은 IChartDataPoint.getValue을 통해 얻을 수 있습니다. 데이터 포인트는 같은 카테고리 위치에 남아 있지만, 차트는 해당 값을 빈 값으로 처리합니다.
다음 예제는 첫 번째 시리즈의 두 번째 점만 삭제합니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int targetDataPointIndex = 1;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
IChartDataPoint dataPoint = series.getDataPoints().get_Item(targetDataPointIndex);
dataPoint.getValue().getAsCell().setValue(null);
presentation.save("clear_data_point_value.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
산점도는 X와 Y 셀이 별도이며, 버블 차트는 크기 셀도 별도입니다. 삭제하려는 값에 해당하는 셀만 비우십시오. 다른 점을 유지하려면 IChartDataPointCollection.clear를 호출하지 마십시오. 해당 메서드는 컬렉션의 모든 데이터 포인트를 제거합니다.
빈 셀 표시 제어
값이 들어 있는 숨겨진 셀은 빈 셀과 별개입니다. 숨겨진 워크시트 행과 열의 데이터를 포함하거나 제외하려면 Include Data from Hidden Rows and Columns를 참고하십시오.
빈 워크북 셀은 데이터가 누락된 경우를 나타내며, 0이 들어 있는 셀은 알려진 숫자 값을 나타냅니다. 셀을 비우려면 IChartDataCell.setValue에 null을 전달하십시오. 숫자 0은 빈 셀 설정에 관계없이 0으로 남습니다.
IChart.setDisplayBlanksAs를 사용해 차트가 빈 셀을 어떻게 표시할지 선택하십시오. 이 설정은 차트 전체에 적용되며, 빈 셀을 0이나 보간값으로 채우지 않고 플롯 방식을 변경합니다.
다음 자체 포함 예제는 하나의 시리즈가 있는 꺾은선 차트를 만들고, Day 3의 값을 삭제한 뒤 각 모드별로 차트를 저장합니다. 입력 파일은 필요하지 않습니다. IChartDataWorkbook은 워크시트 0, 카테고리 레이블은 열 0, 값은 열 1을 사용하며, 행 0에 시리즈 이름을 둡니다. 최종 데이터는 10, 20, empty, 30, 40입니다.
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
IChart chart = slide.getShapes().addChart(ChartType.LineWithMarkers, 40, 40, 640, 400);
IChartData chartData = chart.getChartData();
IChartDataWorkbook workbook = chartData.getChartDataWorkbook();
chartData.getSeries().clear();
chartData.getCategories().clear();
IChartDataCell seriesNameCell = workbook.getCell(0, 0, 1, "Measurements");
IChartSeries series = chartData.getSeries().add(seriesNameCell, chart.getType());
int[] values = { 10, 20, 25, 30, 40 };
for (int i = 0; i < values.length; i++) {
IChartDataCell categoryCell = workbook.getCell(0, i + 1, 0, "Day " + (i + 1));
chartData.getCategories().add(categoryCell);
IChartDataCell valueCell = workbook.getCell(0, i + 1, 1, values[i]);
series.getDataPoints().addDataPointForLineSeries(valueCell);
}
// Day 3을 실제로 비워 두고, 카테고리와 데이터 포인트를 유지합니다.
workbook.getCell(0, 3, 1).setValue(null);
int[] modes = { DisplayBlanksAsType.Gap, DisplayBlanksAsType.Zero, DisplayBlanksAsType.Span };
String[] modeNames = { "Gap", "Zero", "Span" };
for (int i = 0; i < modes.length; i++) {
chart.setDisplayBlanksAs(modes[i]);
presentation.save("empty_cells_" + modeNames[i] + ".pptx", SaveFormat.Pptx);
}
} finally {
presentation.dispose();
}
각 출력 파일은 저장 전 할당된 모드를 이름에 포함합니다: empty_cells_Gap.pptx, empty_cells_Zero.pptx, empty_cells_Span.pptx. 하나의 버전만 저장하려면 원하는 모드를 지정하고 한 번만 프레젠테이션을 저장하면 됩니다.
아래 비교는 세 파일 모두에서 동일한 데이터를 보여줍니다. Day 3은 모든 경우 워크북에서 비어 있습니다:

보이는 효과는 차트 유형에 따라 다릅니다. 꺾은선 차트는 세 모드를 쉽게 비교할 수 있지만, 막대와 열 차트는 누락된 카테고리를 연결할 선이 없으므로 Span이 위와 같은 연결 구간을 만들 수 없습니다. 누락된 열과 0 높이 열도 비슷해 보일 수 있습니다. 마커만 있는 산점도 역시 연결 선이 없으므로 모든 차트 유형에서 세 가지 구별된 결과를 기대하지 말고 사용 중인 차트 유형에 대한 결과를 확인하십시오.
시리즈 간격 너비 설정
간격 너비는 인접한 막대 또는 열 클러스터 사이의 공간을 막대 또는 열 너비의 백분율로 나타낸 값입니다. 겹침과 마찬가지로 이는 개별 시리즈가 아닌 상위 시리즈 그룹에 속합니다. 그룹에 대해 한 번만 IChartSeriesGroup.setGapWidth를 호출하십시오. 큰 값은 클러스터 사이에 더 많은 공간을 만들고, 작은 값은 클러스터를 더 촘촘히 배치합니다.
다음 예제는 간격 너비를 변경하고 최종 프레젠테이션만 저장합니다.
import com.aspose.slides.*;
final int firstSlideIndex = 0;
final int firstSeriesIndex = 0;
final int gapWidthPercent = 30;
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(firstSlideIndex);
IChart chart = slide.getShapes().addChart(ChartType.StackedColumn, 20, 20, 500, 200);
IChartSeries series = chart.getChartData().getSeries().get_Item(firstSeriesIndex);
series.getParentSeriesGroup().setGapWidth(gapWidthPercent);
presentation.save("gap_width_30.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
결과:

FAQ
어떤 차트 유형이 데이터 시리즈를 지원합니까?
ChartType 열거형으로 나타내는 모든 차트 유형이 차트 데이터를 사용하지만, 시리즈마다 동일한 값 구조나 설정을 갖지는 않습니다. 예를 들어 범주형 차트는 카테고리와 값을 사용하고, 산점도는 X와 Y 값을 사용하며, 버블 차트는 버블 크기를 추가합니다. 시리즈 유형에 맞는 데이터 포인트 생성 메서드를 사용하십시오. 겹침 및 간격 너비와 같은 옵션은 호환 가능한 막대 또는 열 그룹에만 적용됩니다.
차트 시리즈 그룹이란 무엇입니까?
IChartSeriesGroup은 그룹 수준 플롯 설정을 공유하는 호환 시리즈를 포함합니다. 조합 차트는 둘 이상의 그룹을 포함할 수 있으므로, 한 시리즈를 통해 접근한 그룹을 변경한다고 해서 차트의 모든 시리즈가 변경되는 것은 아닙니다.
새로 만든 차트에 기본 데이터가 포함되어 있습니까?
예. 기본적으로 IShapeCollection.addChart는 샘플 시리즈, 카테고리 및 값을 생성합니다. 이러한 셀을 편집하거나 완전히 사용자 정의된 데이터 집합을 추가하기 전에 시리즈 및 카테고리 컬렉션을 모두 지울 수 있습니다. 오버로드를 사용하면 기본 데이터 없이 차트를 만들 수도 있습니다.
차트 객체는 워크북 셀과 어떻게 연결됩니까?
시리즈 이름, 카테고리 레이블 및 데이터 포인트 값은 IChartDataWorkbook의 셀을 참조합니다. 참조된 셀을 변경하면 해당 차트 요소가 업데이트됩니다. 사용자 정의 데이터를 만들 때는 각 점이 의도된 카테고리 아래에 플롯되도록 카테고리 행과 시리즈 값 행을 정렬해 두십시오.
전체 시리즈가 아니라 하나의 점만 지우려면 어떻게 해야 합니까?
해당 값 셀을 null로 설정하면 점의 카테고리 위치는 유지된 채 빈 점이 됩니다. 모든 점을 제거하려는 경우에만 IChartDataPointCollection.clear를 사용하십시오. 카테고리도 함께 제거한다면, 모든 시리즈가 카테고리 컬렉션과 정렬되도록 업데이트해야 합니다.
빈 점은 어떻게 표시됩니까?
결과는 차트 유형과 IChart.setDisplayBlanksAs에 의해 구성된 값에 따라 다릅니다. 지원되는 차트는 빈 값을 간격, 0 값 또는 인접 점 연결로 표시할 수 있습니다. 프레젠테이션에서 누락된 데이터 의미에 맞는 설정을 선택하십시오. 완전한 예제와 시각적 비교는 Control the Display of Empty Cells를 참고하십시오.
음수 값은 어떻게 서식이 지정됩니까?
지원되는 막대, 열 및 버블 시리즈의 경우, IChartSeries.setInvertIfNegative를 호출하고 IChartSeries.getInvertedSolidFillColor가 반환하는 색상을 설정하십시오. 개별 점에 대해서는 IChartDataPoint.setInvertIfNegative를 사용해 동작을 재정의할 수 있습니다. 이 메서드들은 서식에 영향을 주며 저장된 숫자 값 자체에는 영향을 주지 않습니다.
시리즈와 점 모두 서식이 지정된 경우 어느 것이 우선합니까?
명시적인 데이터 포인트 서식이 해당 점에 대해 우선합니다. 다른 점들은 명시적인 시리즈 서식 또는 시리즈 서식이 정의되지 않은 경우 자동 차트 스타일 및 테마를 사용합니다. 겹침 및 간격 너비와 같은 그룹 설정은 레이아웃을 제어하며, 점 수준 서식 재정의가 아닙니다.
차트에 포함할 수 있는 시리즈 수에 제한이 있습니까?
Aspose.Slides는 별도의 고정 시리즈 수 제한을 두고 있지 않습니다. 실제로는 프레젠테이션 파일 제한, 사용 가능한 메모리, 렌더링 시간 및 차트 가독성이 실용적인 제한을 결정합니다.
열이 너무 가깝거나 너무 멀리 떨어져 있을 때 어떻게 수정합니까?
적절한 상위 시리즈 그룹에서 IChartSeriesGroup.setGapWidth를 호출하십시오. 값을 늘리면 클러스터 사이 간격이 넓어지고, 값을 줄이면 클러스터가 더 가까워집니다.