จัดการชุดข้อมูลกราฟในงานนำเสนอบน Android
ภาพรวม
กราฟสามารถบันทึกค่าที่พลอตลงในเซลล์ของ workbook หรือเป็นค่าตัวเลขโดยตรงได้ IChartSeries แสดงชุดค่าที่เกี่ยวข้องหนึ่งชุด และแต่ละ IChartDataPoint แสดงจุดหนึ่งในชุดนั้น IChartCategory ให้ฉลากหรือค่ากลุ่มที่ใช้ร่วมกันระหว่างซีรีส์ ในกราฟที่สร้างด้วยข้อมูลเริ่มต้น ชื่อซีรีส์, หมวดหมู่ และค่าจุดข้อมูลจะใช้วัตถุ IChartDataCell จากแผ่นงานกราฟ
สำหรับกราฟประเภทหมวดหมู่ทั่วไป workbook เริ่มต้นจะใช้แถว 0 สำหรับชื่อซีรีส์, คอลัมน์ 0 สำหรับชื่อหมวดหมู่, และเซลล์ที่เหลือสำหรับค่าซีรีส์ ดัชนี worksheet, แถว และคอลัมน์ที่ส่งไปยัง IChartDataWorkbook.getCell มีค่าเริ่มต้นจากศูนย์ โครงสร้างนี้มีประโยชน์เมื่อคุณสร้างกราฟด้วยข้อมูลเริ่มต้น แต่ไม่ควรสันนิษฐานว่าทุกกราฟที่มีอยู่ใช้โครงสร้างนี้ สำหรับงานนำเสนอที่โหลดแล้วให้ตรวจสอบเซลล์ที่ซีรีส์, หมวดหมู่, และจุดข้อมูลอ้างอิง ก่อนทำการเปลี่ยนค่าใน workbook
การตั้งค่ากราฟมีสามระดับต่างกัน:
- การตั้งค่าระดับซีรีส์ เช่น IChartSeries.getFormat ให้ลักษณะการแสดงผลเริ่มต้นสำหรับทุกจุดในซีรีส์หนึ่ง
- การตั้งค่าจุดข้อมูล เช่น IChartDataPoint.getFormat จะทับลักษณะของซีรีส์สำหรับจุดเดียว
- การตั้งค่ากลุ่มใช้กับซีรีส์ที่เข้ากันได้และอยู่ใน IChartSeriesGroup เดียวกัน เข้าถึงกลุ่มผ่าน IChartSeries.getParentSeriesGroup เมื่อคุณต้องการตั้งค่าตัวเลือกเช่น การทับซ้อนหรือความกว้างของช่องว่าง
เมื่อไม่มีการกำหนดการเติมสีจุดหรือซีรีส์โดยชัดเจน สไตล์และธีมของกราฟจะกำหนดลักษณะอัตโนมัติ หากมีการฟอร์แมตทั้งซีรีส์และจุดพร้อมกัน การฟอร์แมตจุดจะมีลำดับความสำคัญสำหรับจุดนั้น

ตั้งค่าค่าซีรีส์โดยใช้ตัวเลขลิเทอรัล
ใช้ตัวเลขลิเทอรัลเมื่อค่าซีรีส์มาจากข้อมูลหรือการคำนวณของแอปพลิเคชันและไม่จำเป็นต้องอ้างอิงเซลล์ใน worksheet เรียก setDataSourceTypeForValues ด้วย DataSourceType.DoubleLiterals ก่อนกำหนดผลลัพธ์ของแต่ละจุดด้วย getValue ผ่าน setAsLiteralDouble
การตั้งค่าคอลเลกชันจะควบคุมประเภทแหล่งข้อมูลของค่าจุดทั้งหมดในซีรีส์นั้น วิธีการ 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 ซึ่งบ่งบอกการกำหนดค่า workbook ภายในหรือภายนอกของกราฟ การใช้ตัวเลขลิเทอรัลเองไม่ทำให้ workbook ที่ฝังอยู่ถูกลบออก ในตัวอย่างนี้ workbook ยังคงใช้ได้สำหรับฉลากหมวดหมู่, ชื่อซีรีส์, และซีรีส์อื่น ๆ ดู Chart Workbook เพื่อเรียนรู้การจัดการ workbook
สำหรับกราฟกระจายและฟองอากาศ ให้ใช้ setDataSourceTypeForXValues และ setDataSourceTypeForYValues เพื่อเลือกแหล่งข้อมูลสำหรับ getXValue และ getYValue กราฟฟองอากาศยังใช้ setDataSourceTypeForBubbleSizes สำหรับ getBubbleSize ตั้งค่าแต่ละแหล่งที่เกี่ยวข้องเป็น DoubleLiterals ก่อนกำหนดตัวเลขผ่านเมธอด setAsLiteralDouble ของค่าดังกล่าว
ตั้งค่าการทับซ้อนของซีรีส์กราฟ
IChartSeries.getOverlap รายงานเปอร์เซ็นต์การทับซ้อนของแถบหรือคอลัมน์ในกราฟ 2 มิติ ตั้งแต่ -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();
}
ผลลัพธ์:

เปลี่ยนชื่อซีรีส์
ชื่อซีรีส์ถูกจัดเก็บในแผ่นงานข้อมูลของกราฟและโดยปกติจะแสดงในคำอธิบายตาราง ใน workbook เริ่มต้นที่สร้างสำหรับกราฟคอลัมน์แบบกลุ่ม เซลล์ 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();
}
ผลลัพธ์:

สร้างซีรีส์ที่มีชื่อจากหลายเซลล์
ชื่อซีรีส์แบบประกอบมีประโยชน์เมื่อชื่อผลิตภัณฑ์และช่วงเวลารายงานถูกเก็บในเซลล์ workbook แยกกัน ตัวอย่างเช่น สามารถรวม Product A ใน B1 และ 2026 ใน C1 ให้เป็นชื่อซีรีส์เดียวโดยยังคงเชื่อมโยงทั้งสองส่วนกับเซลล์ต้นทาง
ใช้ 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 ค่าติดลบจะยังคงอยู่ใน workbook; เพียงสีการแสดงผลที่เปลี่ยน
ตัวอย่างต่อไปนี้แทนที่ข้อมูลกราฟเริ่มต้นด้วยซีรีส์หนึ่ง แถว worksheet 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();
}
ลบค่าจุดข้อมูลเฉพาะ
เพื่อทำให้จุดหนึ่งเป็นค่าว่างโดยไม่ลบจุดอื่น ๆ ให้กำหนดค่าเซลล์ workbook ที่สนับสนุนเป็น 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 หากต้องการคงจุดอื่นไว้ เพราะเมธอดนี้จะลบทุกจุดจากคอลเลกชัน
ควบคุมการแสดงผลของเซลล์ว่าง
เซลล์ที่ซ่อนซึ่งมีค่าเป็นกรณีแยกจากเซลล์ว่าง หากต้องการรวมหรือแยกข้อมูลจากแถวและคอลัมน์ worksheet ที่ซ่อน ให้ดูที่ Include Data from Hidden Rows and Columns
เซลล์ workbook ที่ว่างแสดงถึงข้อมูลที่หายไป; เซลล์ที่มีค่า 0 แสดงถึงค่าตัวเลขที่รู้จัก เรียก IChartDataCell.setValue ด้วย null เพื่อทำให้เซลล์เป็นค่าว่าง ตัวเลขศูนย์จะคงเป็นศูนย์ไม่ว่าการตั้งค่าเซลล์ว่างจะเป็นอย่างไร
ใช้ IChart.setDisplayBlanksAs เพื่อเลือกวิธีที่กราฟแสดงเซลล์ว่าง การตั้งค่านี้ใช้กับกราฟทั้งหมด จะเปลี่ยนวิธีที่ค่าว่างถูกพลอตโดยไม่ต้องเติมค่า 0 หรือค่าประมาณลงในเซลล์ workbook ที่ว่าง
ตัวอย่างต่อไปนี้เป็นตัวอย่างที่สมบูรณ์ สร้างกราฟเส้นที่มีซีรีส์หนึ่ง, ลบค่าของ Day 3, และบันทึกกราฟเดียวกันในแต่ละโหมด ไม่จำเป็นต้องมีไฟล์อินพุต IChartDataWorkbook ใช้ worksheet 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);
}
// ปล่อยให้วัน 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 จะเป็นค่าว่างใน workbook ทุกกรณี:

ผลลัพธ์ที่มองเห็นขึ้นอยู่กับประเภทกราฟ กราฟเส้นทำให้สามโหมดนี้ง่ายต่อการเปรียบเทียบ กราฟแถบและคอลัมน์ไม่มีเส้นเชื่อมต่อผ่านหมวดหมู่ที่หายไป ดังนั้น Span ไม่สามารถสร้างส่วนเชื่อมต่อที่แสดงข้างต้น; คอลัมน์ที่หายไปและคอลัมน์ความสูงศูนย์อาจดูคล้ายกันเช่นกัน เช่นเดียวกับกราฟกระจายที่มีเฉพาะเครื่องหมายก็ไม่มีเส้นเชื่อมต่อ อย่าคาดหวังผลลัพธ์ที่แตกต่างสามแบบสำหรับทุกประเภทกราฟ; ตรวจสอบผลลัพธ์สำหรับประเภทที่คุณใช้
ตั้งค่าความกว้างช่องว่างของซีรีส์
ความกว้างช่องว่างคือระยะห่างระหว่างกลุ่มแถบหรือคอลัมน์ที่อยู่ติดกัน แสดงเป็นเปอร์เซ็นต์ของความกว้างแถบหรือคอลัมน์ เช่นเดียวกับการทับซ้อน มันเป็นของกลุ่มซีรีส์พาเรนต์ ไม่ได้เป็นของแต่ละซีรีส์ เรียก 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();
}
ผลลัพธ์:

คำถามที่พบบ่อย
กราฟประเภทใดสนับสนุนข้อมูลซีรีส์?
ทุกประเภทกราฟที่แสดงโดย enumeration ChartType ใช้ข้อมูลกราฟ, แต่ซีรีส์ของแต่ละประเภทอาจมีโครงสร้างค่าและการตั้งค่าที่แตกต่างกัน ตัวอย่างเช่น กราฟประเภทหมวดหมู่ใช้หมวดหมู่และค่า, กราฟกระจายใช้ค่า X และ Y, และกราฟฟองอากาศเพิ่มขนาดฟอง ใช้วิธีการสร้างจุดข้อมูลที่ตรงกับประเภทซีรีส์ ตัวเลือกเช่นการทับซ้อนและความกว้างช่องว่างใช้ได้กับกลุ่มแถบหรือคอลัมน์ที่เข้ากันได้เท่านั้น
กลุ่มซีรีส์กราฟคืออะไร?
IChartSeriesGroup มีซีรีส์ที่เข้ากันได้ซึ่งใช้การตั้งค่าการพลอตระดับกลุ่ม กราฟแบบผสมอาจมีหลายกลุ่ม, ดังนั้นการเปลี่ยนแปลงกลุ่มผ่านซีรีส์หนึ่งอาจไม่ส่งผลต่อทุกซีรีส์ในกราฟ
กราฟที่สร้างใหม่มีข้อมูลเริ่มต้นหรือไม่?
ใช่ โดยค่าเริ่มต้น IShapeCollection.addChart จะสร้างซีรีส์, หมวดหมู่, และค่าตัวอย่าง คุณสามารถแก้ไขเซลล์เหล่านั้นหรือทำความสะอาดคอลเลกชันซีรีส์และหมวดหมู่ก่อนเพิ่มชุดข้อมูลที่กำหนดเองโดยสมบูรณ์ มี overload ที่สามารถสร้างกราฟโดยไม่มีข้อมูลเริ่มต้นได้ด้วย
กราฟอธิบายความสัมพันธ์กับเซลล์ workbook อย่างไร?
ชื่อซีรีส์, ฉลากหมวดหมู่, และค่าจุดข้อมูลอ้างอิงเซลล์ใน IChartDataWorkbook การเปลี่ยนแปลงเซลล์ที่อ้างอิงจะอัปเดตองค์ประกอบกราฟที่สอดคล้องกัน เมื่อคุณสร้างข้อมูลแบบกำหนดเอง ให้รักษาแถวหมวดหมู่และแถวค่าซีรีส์ให้สอดคล้องกันเพื่อให้แต่ละจุดถูกพลอตภายใต้หมวดหมู่ที่ตั้งใจไว้
จะลบจุดเดียวโดยไม่ลบซีรีส์ทั้งหมดได้อย่างไร?
ตั้งค่าเซลล์ค่าที่เกี่ยวข้องเป็น null เพื่อรักษาตำแหน่งหมวดหมู่ของจุดนั้นเป็นจุดว่าง ใช้ IChartDataPointCollection.clear เฉพาะเมื่อคุณต้องการลบทุกจุดจากซีรีส์นั้น หากคุณลบหมวดหมู่ด้วย, ให้ปรับซีรีส์ทุกตัวให้ค่าของพวกเขายังคงสอดคล้องกับคอลเลกชันหมวดหมู่
จุดว่างแสดงผลอย่างไร?
ผลลัพธ์ขึ้นกับประเภทกราฟและค่าที่กำหนดผ่าน IChart.setDisplayBlanksAs กราฟที่สนับสนุนสามารถแสดงค่าว่างเป็นช่องว่าง, เป็นค่าศูนย์, หรือโดยการเชื่อมต่อจุดข้างเคียง เลือกการตั้งค่าที่สอดคล้องกับความหมายของข้อมูลที่หายไปในงานนำเสนอของคุณ ดูที่ Control the Display of Empty Cells เพื่อดูตัวอย่างเต็มและเปรียบเทียบภาพ
ค่าติดลบถูกฟอร์แมตอย่างไร?
สำหรับซีรีส์แถบ, คอลัมน์, และฟองอากาศที่สนับสนุน, ให้เรียก IChartSeries.setInvertIfNegative แล้วตั้งค่าสีที่ได้จาก IChartSeries.getInvertedSolidFillColor คุณสามารถทับการทำงานสำหรับจุดเดียวด้วย IChartDataPoint.setInvertIfNegative วิธีเหล่านี้ส่งผลต่อการฟอร์แมต, ไม่ได้เปลี่ยนค่าตัวเลขที่จัดเก็บ
เมื่อตั้งค่าทั้งซีรีส์และจุดพร้อมกัน ตัวฟอร์แมตใดชนะ?
การฟอร์แมตจุดข้อมูลโดยชัดเจนจะมีลำดับความสำคัญสำหรับจุดนั้น จุดอื่น ๆ จะใช้ฟอร์แมตซีรีส์ที่กำหนดไว้หรือหากไม่ได้กำหนดจะใช้สไตล์และธีมของกราฟโดยอัตโนมัติ การตั้งค่ากลุ่มเช่นการทับซ้อนและความกว้างช่องว่างควบคุมการจัดวางและไม่ใช่การฟอร์แมตระดับจุด
กราฟสามารถมีซีรีส์ได้มากแค่ไหน?
Aspose.Slides ไม่ได้กำหนดขีดจำกัดจำนวนซีรีส์อย่างแยกจากกัน อย่างไรก็ตาม ขนาดไฟล์งานนำเสนอ, หน่วยความจำที่มี, เวลาเรนเดอร์, และความอ่านง่ายของกราฟเป็นปัจจัยที่กำหนดขีดจำกัดที่ใช้ได้จริง
ควรทำอย่างไรเมื่อคอลัมน์ใกล้กันเกินไปหรือห่างกันเกินไป?
เรียก IChartSeriesGroup.setGapWidth บนกลุ่มซีรีส์แม่ที่เหมาะสม เพิ่มค่าเพื่อเพิ่มช่องว่างระหว่างกลุ่ม, หรือ ลดค่าเพื่อทำให้กลุ่มเข้าหากันมากขึ้น.