จัดการชุดข้อมูลแผนภูมิในการนำเสนอด้วย PHP
ภาพรวม
แผนภูมิจะเก็บข้อมูลที่แปลงรูปใน workbook ของข้อมูลแผนภูมิ. A ChartSeries แสดงชุดค่าที่เกี่ยวข้องหนึ่งชุด, และแต่ละ ChartDataPoint ในชุดจะอ้างอิงถึงหนึ่งหรือหลายเซลล์ของ workbook. วัตถุ ChartCategory ให้ป้ายหรือค่าการจัดกลุ่มที่ใช้ร่วมกันโดยชุดข้อมูล. ชื่อชุด, หมวดหมู่, และค่าจุดจึงเชื่อมต่อกับวัตถุ ChartDataCell แทนที่จะถูกเก็บเป็นข้อความแสดงผลเท่านั้น.
สำหรับแผนภูมิกลุ่มประเภททั่วไป, workbook เริ่มต้นจะใช้แถว 0 สำหรับชื่อชุด, คอลัมน์ 0 สำหรับชื่อหมวดหมู่, และเซลล์ที่เหลือสำหรับค่าชุด. ดัชนีของ worksheet, แถว, และคอลัมน์ที่ส่งไปยัง ChartDataWorkbook.getCell มีค่าเริ่มต้นจากศูนย์. การจัดเรียงนี้เป็นประโยชน์เมื่อคุณสร้างแผนภูมิด้วยข้อมูลเริ่มต้น, แต่ไม่ควรสันนิษฐานว่าทุกแผนภูมิที่มีอยู่ใช้แบบนี้. สำหรับการนำเสนอที่โหลดมา, ตรวจสอบเซลล์ที่ชุด, หมวดหมู่, และจุดข้อมูลอ้างอิงก่อนที่จะเปลี่ยนค่าของ workbook.
การตั้งค่าแผนภูมิมีสามระดับที่แตกต่างกัน:
- การตั้งค่าระดับชุด, เช่น ChartSeries.getFormat, ให้รูปลักษณ์เริ่มต้นสำหรับทุกจุดในชุดเดียว.
- การตั้งค่าระดับจุดข้อมูล, เช่น ChartDataPoint.getFormat, จะทำให้การจัดรูปแบบของชุดถูกแทนที่สำหรับจุดหนึ่ง.
- การตั้งค่าระดับกลุ่มใช้กับชุดที่เข้ากันซึ่งอยู่ใน ChartSeriesGroup เดียวกัน. เข้าถึงกลุ่มผ่าน ChartSeries.getParentSeriesGroup เมื่อคุณต้องการตั้งค่าตัวเลือกเช่นการทับหรือความกว้างของช่องว่าง.
เมื่อไม่มีการกำหนดการเติมสีจุดหรือชุดอย่างชัดเจน, รูปแบบแผนภูมิและธีมจะกำหนดลักษณะอัตโนมัติ. เมื่อมีการจัดรูปแบบทั้งชุดและจุด, การจัดรูปแบบของจุดจะมีลำดับความสำคัญสำหรับจุดนั้น.

ตั้งค่าการทับของชุดแผนภูมิ
ChartSeries.getOverlap รายงานว่าบาร์หรือคอลัมน์ทับกันเท่าใดในแผนภูมิ 2D, ตั้งแต่ -100 ถึง 100 เปอร์เซ็นต์. มันเป็นการฉายภาพแบบอ่านอย่างเดียวของการตั้งค่าในกลุ่มชุดแม่. ใช้ ChartSeriesGroup.setOverlap เพื่ออัปเดตทุกชุดที่เข้ากันในกลุ่มนั้น. ตัวเลือกนี้ใช้กับประเภทแผนภูมิที่แสดงบาร์หรือคอลัมน์แบบจัดกลุ่ม; มันจะไม่ส่งผลต่อกลุ่มชุดที่ไม่เกี่ยวข้องในแผนภูมิแบบผสม.
ตัวอย่างต่อไปนี้ตั้งค่าการทับสำหรับกลุ่มที่มีชุดแรกอยู่ในนั้น:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$overlapPercent = 30;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
// แผนภูมิใหม่มีชุดตัวอย่าง, หมวดหมู่, และค่า.
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$series->getParentSeriesGroup()->setOverlap($overlapPercent);
$presentation->save("series_overlap.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์:

เปลี่ยนสีเติมของชุด
ใช้ ChartSeries.getFormat เพื่อกำหนดการเติมสีเริ่มต้นสำหรับชุดทั้งหมด. หากจุดมีการเติมสีที่ชัดเจนแล้ว, การตั้งค่า ChartDataPoint.getFormat ของจุดนั้นจะทับการเติมสีของชุดสำหรับจุดนั้น.
ตัวอย่างต่อไปนี้ใช้การเติมสีฟ้าตรงให้กับชุดแรก:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$blueColor = java("java.awt.Color")->BLUE;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$series->getFormat()->getFill()->setFillType(FillType::Solid);
$series->getFormat()->getFill()->getSolidFillColor()->setColor($blueColor);
$presentation->save("series_color.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์:

เปลี่ยนชื่อชุด
ชื่อชุดถูกจัดเก็บใน workbook ของข้อมูลแผนภูมิและปกติจะแสดงในคำอธิบาย. ใน workbook เริ่มต้นที่สร้างสำหรับแผนภูมิคอลัมน์แบบจัดกลุ่ม, เซลล์ B1 อยู่ที่แถว 0, คอลัมน์ 1 และมีชื่อของชุดแรก. ตัวแปรที่ตั้งชื่อในตัวอย่างต่อไปนี้ทำให้โครงสร้างนี้ชัดเจน:
$firstSlideIndex = 0;
$worksheetIndex = 0;
$seriesNameRowIndex = 0;
$firstSeriesColumnIndex = 1;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$workbook = $chart->getChartData()->getChartDataWorkbook();
$seriesNameCell = $workbook->getCell($worksheetIndex, $seriesNameRowIndex, $firstSeriesColumnIndex);
$seriesNameCell->setValue("Revenue");
$presentation->save("series_name.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
คุณสามารถอัปเดตเซลล์ที่อ้างอิงโดย ChartSeries.getName ได้เช่นกัน. วิธีนี้หลีกเลี่ยงการสันนิษฐานแถวและคอลัมน์เฉพาะในแผนภูมิที่มีอยู่:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$firstNameCellIndex = 0;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$seriesNameCell = $series->getName()->getAsCells()->get_Item($firstNameCellIndex);
$seriesNameCell->setValue("Revenue");
$presentation->save("series_name.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์:

สร้างชุดที่มีชื่อจากหลายเซลล์
ชื่อชุดแบบคอมโพสิตมีประโยชน์เมื่อชื่อผลิตภัณฑ์และช่วงเวลาการรายงานถูกเก็บในเซลล์ workbook แยกกัน. ตัวอย่างเช่น, คุณสามารถผสาน Product A ใน B1 และ 2026 ใน C1 ให้เป็นชื่อชุดเดียวขณะยังคงเชื่อมโยงส่วนทั้งสองกับเซลล์ต้นทางของพวกมัน.
ใช้ ChartDataWorkbook::getCellCollection เพื่อดึงช่วงชื่อ, แล้วส่งคอลเลกชันนั้นไปยัง ChartSeriesCollection::add. พารามิเตอร์ skipHiddenCells ควบคุมว่าจะรวมเซลล์ที่ซ่อนอยู่หรือไม่: true จะยกเว้น, false จะรวม. ตัวอย่างนี้ใช้ false เพื่อรวมทุกเซลล์ในช่วงชื่อ.
ตัวอย่างต่อไปนี้สร้างการนำเสนอที่มีชุดเดียวและสองจุดข้อมูล. เซลล์ B1:C1 จัดหาเฉพาะชื่อชุด; A2:A3 จัดหารหัสหมวดหมู่, และ B2:B3 จัดหาราคาตัวเลข.
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 50, 50, 620, 180);
$chart->getChartData()->getSeries()->clear();
$chart->getChartData()->getCategories()->clear();
$chart->setLegend(true);
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
// เซลล์สองเซลล์นี้ให้ชื่อชุด.
$workbook->getCell(0, 0, 1, "Product A");
$workbook->getCell(0, 0, 2, "2026");
$nameCells = $workbook->getCellCollection('Sheet1!$B$1:$C$1', false);
$series = $chart->getChartData()->getSeries()->add($nameCells, ChartType::ClusteredColumn);
// เซลล์แยกต่างหากให้หมวดหมู่และจุดข้อมูลเชิงตัวเลข.
$northCategory = $workbook->getCell(0, 1, 0, "North");
$southCategory = $workbook->getCell(0, 2, 0, "South");
$chart->getChartData()->getCategories()->add($northCategory);
$chart->getChartData()->getCategories()->add($southCategory);
$northValue = $workbook->getCell(0, 1, 1, 120);
$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, มีช่องว่างระหว่างค่าจากสองเซลล์. คำอธิบายจะแสดงเป็นรายการเดียวสำหรับทั้งสองคอลัมน์. ภาพด้านล่างแสดงผลลัพธ์:

รับสีเติมอัตโนมัติของชุด
ChartSeries.getAutomaticSeriesColor คืนค่าสีที่คำนวณจากดัชนีชุดและรูปแบบแผนภูมิ. นี่คือสีที่ใช้เมื่อการเติมสีของชุดไม่ได้ถูกกำหนดอย่างชัดเจน. การเรียกเมธอดนี้อ่านค่าสีที่คำนวณ; ไม่ได้กำหนดการเติมสีใหม่.
ตัวอย่างต่อไปนี้พิมพ์สีอัตโนมัติของแต่ละชุดเริ่มต้น:
$firstSlideIndex = 0;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$seriesCount = java_values($chart->getChartData()->getSeries()->size());
for ($seriesIndex = 0; $seriesIndex < $seriesCount; $seriesIndex++) {
$series = $chart->getChartData()->getSeries()->get_Item($seriesIndex);
$automaticColor = $series->getAutomaticSeriesColor();
$red = java_values($automaticColor->getRed());
$green = java_values($automaticColor->getGreen());
$blue = java_values($automaticColor->getBlue());
echo "Series " . $seriesIndex . ": java.awt.Color[r=" . $red . ",g=" . $green . ",b=" . $blue . "]" . PHP_EOL;
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์ตัวอย่างสำหรับรูปแบบแผนภูมิเริ่มต้น:
Series 0: java.awt.Color[r=79,g=129,b=189]
Series 1: java.awt.Color[r=192,g=80,b=77]
Series 2: java.awt.Color[r=155,g=187,b=89]
สีที่ได้จะขึ้นอยู่กับรูปแบบและธีมของแผนภูมิ.
ตั้งค่าสีเติมกลับทิศสำหรับชุดแผนภูมิ
สำหรับชุดบาร์, คอลัมน์, และบับเบิล, ChartSeries.setInvertIfNegative สามารถแสดงค่าลบด้วยสีเติมที่แตกต่าง. ตั้งค่าการเติมสีของชุดเป็นสีทึบ, เปิดการย้อนกลับ, และกำหนดสีค่าลบผ่าน ChartSeries.getInvertedSolidFillColor. ตัวเลขลบยังคงไม่เปลี่ยนใน workbook; มีเพียงสีที่แสดงเปลี่ยนเท่านั้น.
ตัวอย่างต่อไปนี้แทนที่ข้อมูลแผนภูมิเริ่มต้นด้วยชุดเดียว. แถว worksheet 0 มีชื่อชุด, คอลัมน์ 0 มีชื่อหมวดหมู่, และคอลัมน์ 1 มีค่าต่าง ๆ:
$firstSlideIndex = 0;
$worksheetIndex = 0;
$headerRowIndex = 0;
$categoryColumnIndex = 0;
$firstSeriesColumnIndex = 1;
$firstDataRowIndex = 1;
$categoryNames = ["Category 1", "Category 2", "Category 3"];
$seriesValues = [-20, 50, -30];
$redColor = java("java.awt.Color")->RED;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$chartData = $chart->getChartData();
$workbook = $chartData->getChartDataWorkbook();
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$seriesNameCell = $workbook->getCell($worksheetIndex, $headerRowIndex, $firstSeriesColumnIndex, "Series 1");
$chartType = $chart->getType();
$series = $chartData->getSeries()->add($seriesNameCell, $chartType);
$categoryCount = count($categoryNames);
for ($categoryIndex = 0; $categoryIndex < $categoryCount; $categoryIndex++) {
$dataRowIndex = $firstDataRowIndex + $categoryIndex;
$categoryName = $categoryNames[$categoryIndex];
$seriesValue = $seriesValues[$categoryIndex];
$categoryCell = $workbook->getCell($worksheetIndex, $dataRowIndex, $categoryColumnIndex, $categoryName);
$chartData->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell($worksheetIndex, $dataRowIndex, $firstSeriesColumnIndex, $seriesValue);
$series->getDataPoints()->addDataPointForBarSeries($valueCell);
}
$automaticSeriesColor = $series->getAutomaticSeriesColor();
$series->getFormat()->getFill()->setFillType(FillType::Solid);
$series->getFormat()->getFill()->getSolidFillColor()->setColor($automaticSeriesColor);
$series->setInvertIfNegative(true);
$series->getInvertedSolidFillColor()->setColor($redColor);
$presentation->save("inverted_solid_fill_color.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์:

คุณสามารถเปิดการย้อนกลับสำหรับจุดเดียวผ่าน ChartDataPoint.setInvertIfNegative. ในตัวอย่างต่อไปนี้ การย้อนกลับถูกปิดการทำงานสำหรับชุดและเปิดเฉพาะสำหรับจุดที่เลือก. จุดนั้นยังถูกกำหนดค่าลบเพื่อให้เห็นผล:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$targetDataPointIndex = 2;
$negativeValue = -30;
$redColor = java("java.awt.Color")->RED;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$automaticSeriesColor = $series->getAutomaticSeriesColor();
$series->getFormat()->getFill()->setFillType(FillType::Solid);
$series->getFormat()->getFill()->getSolidFillColor()->setColor($automaticSeriesColor);
$series->getInvertedSolidFillColor()->setColor($redColor);
$series->setInvertIfNegative(false);
$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 {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ลบค่าจุดข้อมูลเฉพาะ
เพื่อทำให้จุดหนึ่งว่างเปล่าระหว่างที่ไม่ลบจุดอื่น, ตั้งค่าเซลล์ workbook ที่สนับสนุนเป็น null. สำหรับแผนภูมิคอลัมน์, ค่าที่แสดงอยู่ผ่าน ChartDataPoint.getValue. จุดข้อมูลจะคงตำแหน่งหมวดหมู่เดิม, แต่วิธีแสดงค่าจะถือว่าเป็นค่าว่างตามการตั้งค่าค่าว่างของแผนภูมิ.
ตัวอย่างต่อไปนี้ลบเฉพาะจุดที่สองในชุดแรก:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$targetDataPointIndex = 1;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$dataPoint = $series->getDataPoints()->get_Item($targetDataPointIndex);
$dataPoint->getValue()->getAsCell()->setValue(null);
$presentation->save("clear_data_point_value.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
แผนภูมิกระจายใช้เซลล์ X และ Y แยกกัน, และแผนภูมิบับเบิลยังใช้เซลล์ขนาด. ให้ลบเฉพาะเซลล์ที่เป็นค่าที่คุณต้องการลบ. อย่าเรียก ChartDataPointCollection.clear เมื่อคุณต้องการคงจุดอื่นไว้, เพราะเมธอดนั้นจะลบทุกจุดจากคอลเลกชัน.
ควบคุมการแสดงผลของเซลล์ว่าง
เซลล์ที่ซ่อนซึ่งมีค่าเป็นกรณีที่แตกต่างจากเซลล์ว่าง. เพื่อรวมหรือแยกข้อมูลจากแถวและคอลัมน์ worksheet ที่ซ่อน, ดูที่ Include Data from Hidden Rows and Columns.
เซลล์ workbook ว่างหมายถึงข้อมูลที่หายไป; เซลล์ที่มีค่า 0 หมายถึงค่าตัวเลขที่ทราบ. เรียก ChartDataCell::setValue ด้วย null เพื่อทำให้เซลล์ว่าง. ศูนย์ตัวเลขยังคงเป็นศูนย์ไม่ว่าการตั้งค่าเซลล์ว่างจะเป็นอย่างไร.
ใช้ Chart::setDisplayBlanksAs เพื่อเลือกวิธีที่แผนภูมิแสดงเซลล์ว่าง. การตั้งค่านี้ใช้กับแผนภูมิทั้งหมด. มันเปลี่ยนวิธีการวาดช่องว่างโดยไม่ต้องเติมค่า 0 หรือค่าที่ประมาณในเซลล์ workbook ที่ว่าง.
ตัวอย่างต่อไปนี้สร้างแผนภูมิเส้นที่มีชุดเดียว, ลบค่าของวันที่ 3, และบันทึกแผนภูมิเดียวกันในแต่ละโหมด. ไม่ต้องใช้ไฟล์อินพุต. ChartDataWorkbook ใช้ worksheet 0, คอลัมน์ 0 สำหรับป้ายหมวดหมู่, และคอลัมน์ 1 สำหรับค่าต่าง ๆ; แถว 0 มีชื่อชุด. ข้อมูลสุดท้ายคือ 10, 20, empty, 30, 40.
use aspose\slides\ChartType;
use aspose\slides\DisplayBlanksAsType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::LineWithMarkers, 40, 40, 640, 400);
$chartData = $chart->getChartData();
$workbook = $chartData->getChartDataWorkbook();
$chartData->getSeries()->clear();
$chartData->getCategories()->clear();
$seriesNameCell = $workbook->getCell(0, 0, 1, "Measurements");
$series = $chartData->getSeries()->add($seriesNameCell, $chart->getType());
$values = [10, 20, 25, 30, 40];
for ($i = 0; $i < count($values); $i++) {
$categoryCell = $workbook->getCell(0, $i + 1, 0, "Day " . ($i + 1));
$chartData->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, $values[$i]);
$series->getDataPoints()->addDataPointForLineSeries($valueCell);
}
// ปล่อยให้วัน 3 เป็นค่าว่างจริง ๆ ขณะที่คงหมวดหมู่และจุดข้อมูลของมันไว้.
$workbook->getCell(0, 3, 1)->setValue(null);
$modes = [DisplayBlanksAsType::Gap, DisplayBlanksAsType::Zero, DisplayBlanksAsType::Span];
$modeNames = ["Gap", "Zero", "Span"];
for ($i = 0; $i < count($modes); $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. หากต้องการบันทึกเพียงเวอร์ชันเดียว, ให้กำหนดโหมดที่ต้องการและบันทึกการนำเสนอเพียงครั้งเดียวแทนการวนลูปโหมดทั้งหมด.
การเปรียบเทียบด้านล่างแสดงข้อมูลเดียวกันในทั้งสามไฟล์. วันที่ 3 จะว่างใน workbook ทุกกรณี:

ผลลัพธ์ที่มองเห็นขึ้นอยู่กับประเภทแผนภูมิ. แผนภูมิเส้นทำให้เปรียบเทียบโหมดทั้งสามได้ง่าย. แผนภูมิแถบและคอลัมน์ไม่มีเส้นเชื่อมต่อผ่านหมวดหมู่ที่หายไป, ดังนั้น Span ไม่สามารถสร้างส่วนเชื่อมต่อได้; คอลัมน์ที่หายไปและคอลัมน์ความสูงศูนย์อาจดูคล้ายกัน. เช่นเดียวกับแผนภูมิกระจายที่มีเครื่องหมายเท่านั้นก็ไม่มีเส้นเชื่อมต่อ. อย่าคาดหวังผลลัพธ์สามแบบที่แตกต่างสำหรับทุกประเภทแผนภูมิ; ตรวจสอบผลลัพธ์สำหรับประเภทที่คุณใช้.
ตั้งค่าความกว้างของช่องว่างระหว่างชุด
ความกว้างของช่องว่างคือระยะห่างระหว่างกลุ่มบาร์หรือคอลัมน์ที่อยู่ติดกัน, แสดงเป็นเปอร์เซ็นต์ของความกว้างบาร์หรือคอลัมน์. เช่นเดียวกับการทับ, มันเป็นของกลุ่มชุดแม่ไม่ใช่ของชุดเดียว. เรียก ChartSeriesGroup.setGapWidth ครั้งเดียวสำหรับกลุ่ม. ค่ามากทำให้มีช่องว่างมากขึ้นระหว่างกลุ่ม; ค่าน้อยทำให้กลุ่มใกล้กันมากขึ้น.
ตัวอย่างต่อไปนี้เปลี่ยนความกว้างของช่องว่างและบันทึกการนำเสนอสุดท้ายเท่านั้น:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$gapWidthPercent = 30;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
$chart = $slide->getShapes()->addChart(ChartType::StackedColumn, 20, 20, 500, 200);
$series = $chart->getChartData()->getSeries()->get_Item($firstSeriesIndex);
$series->getParentSeriesGroup()->setGapWidth($gapWidthPercent);
$presentation->save("gap_width_30.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
ผลลัพธ์:

คำถามที่พบบ่อย
ประเภทแผนภูมิใดสนับสนุนชุดข้อมูล?
ทุกประเภทแผนภูมิที่ระบุด้วย ChartType ใช้ข้อมูลแผนภูมิ, แต่ชุดของพวกเขาไม่ได้มีโครงสร้างค่าหรือการตั้งค่าเดียวกัน. ตัวอย่างเช่น, แผนภูมิประเภทหมวดหมู่ใช้หมวดหมู่และค่า, แผนภูมิกระจายใช้ค่า X และ Y, และแผนภูมิบับเบิลเพิ่มขนาดบับเบิล. ใช้วิธีการสร้างจุดข้อมูลที่สอดคล้องกับประเภทชุด. ตัวเลือกเช่นการทับและความกว้างของช่องว่างใช้ได้เฉพาะกับกลุ่มบาร์หรือคอลัมน์ที่เข้ากัน.
กลุ่มชุดแผนภูมิคืออะไร?
ChartSeriesGroup จะเก็บชุดที่เข้ากันซึ่งใช้การตั้งค่าการวาดระดับกลุ่มร่วมกัน. แผนภูมิแบบผสมอาจมีหลายกลุ่ม, ดังนั้นการเปลี่ยนกลุ่มผ่านชุดหนึ่งไม่ได้หมายความว่าจะเปลี่ยนทุกชุดในแผนภูมิ.
แผนภูมิที่สร้างใหม่มีข้อมูลเริ่มต้นหรือไม่?
ใช่. โดยค่าเริ่มต้น, ShapeCollection.addChart จะสร้างชุดตัวอย่าง, หมวดหมู่, และค่า. คุณสามารถแก้ไขเซลล์เหล่านั้นหรือทำความสะอาดคอลเลกชันชุดและหมวดหมู่ก่อนเพิ่มชุดข้อมูลที่กำหนดเองอย่างเต็มที่. มีการโหลดที่สามารถสร้างแผนภูมิโดยไม่มีข้อมูลเริ่มต้นได้.
แผนภูมิเชื่อมต่อกับเซลล์ workbook อย่างไร?
ชื่อชุด, ป้ายหมวดหมู่, และค่าจุดข้อมูลอ้างอิงเซลล์ใน ChartDataWorkbook. การเปลี่ยนเซลล์ที่อ้างอิงจะอัปเดตองค์ประกอบแผนภูมิที่สอดคล้อง. เมื่อคุณสร้างข้อมูลกำหนดเอง, ให้จัดแถวหมวดหมู่และแถวค่าชุดให้สอดคล้องกันเพื่อให้แต่ละจุดแสดงภายใต้หมวดหมู่ที่ต้องการ.
จะลบจุดเดียวแทนที่จะลบชุดทั้งหมดอย่างไร?
ตั้งค่าเซลล์ค่าที่เกี่ยวข้องเป็น null เพื่อคงตำแหน่งหมวดหมู่ของจุดเป็นจุดว่าง. ใช้ ChartDataPointCollection.clear เฉพาะเมื่อคุณต้องการลบทุกจุดจากชุดนั้น. หากคุณลบหมวดหมู่ด้วย, ให้อัปเดตทุกชุดเพื่อให้ค่าของพวกเขายังคงสอดคล้องกับคอลเลกชันหมวดหมู่.
จุดว่างจะแสดงอย่างไร?
ผลลัพธ์ขึ้นอยู่กับประเภทแผนภูมิและค่าที่กำหนดผ่าน Chart.setDisplayBlanksAs. แผนภูมิที่รองรับสามารถแสดงช่องว่างเป็นช่องว่าง, เป็นค่าศูนย์, หรือโดยเชื่อมจุดใกล้เคียงกัน. เลือกการตั้งค่าที่สอดคล้องกับความหมายของข้อมูลที่หายไปในงานนำเสนอของคุณ. ดูที่ Control the Display of Empty Cells สำหรับตัวอย่างเต็มและการเปรียบเทียบภาพ.
ค่าลบจะถูกจัดรูปแบบอย่างไร?
สำหรับชุดบาร์, คอลัมน์, และบับเบิลที่รองรับ, เรียก ChartSeries.setInvertIfNegative และตั้งค่าสีที่ได้จาก ChartSeries.getInvertedSolidFillColor. คุณสามารถบิดเบือนพฤติกรรมสำหรับจุดเดี่ยวด้วย ChartDataPoint.setInvertIfNegative. วิธีเหล่านี้ส่งผลต่อการจัดรูปแบบ, ไม่ได้เปลี่ยนค่าตัวเลขที่เก็บไว้.
การจัดรูปแบบใดชนะเมื่อทั้งชุดและจุดถูกจัดรูปแบบ?
การจัดรูปแบบจุดข้อมูลที่ชัดเจนจะมีลำดับความสำคัญสำหรับจุดนั้น. จุดอื่น ๆ จะใช้การจัดรูปแบบชุดที่ชัดเจนหรือ, หากไม่มีการกำหนดรูปแบบชุด, จะใช้รูปแบบและธีมแผนภูมิโดยอัตโนมัติ. การตั้งค่ากลุ่มเช่นการทับและความกว้างของช่องว่างควบคุมการจัดวางและไม่ใช่การแทนที่การจัดรูปแบบระดับจุด.
แผนภูมิสามารถมีชุดได้มากที่สุดกี่ชุด?
Aspose.Slides ไม่ได้กำหนดขีดจำกัดจำนวนชุดเป็นค่าคงที่. ในทางปฏิบัติ, ข้อจำกัดของไฟล์การนำเสนอ, หน่วยความจำที่มี, เวลาเรนเดอร์, และความอ่านง่ายของแผนภูมิจะกำหนดขีดจำกัดที่มีประโยชน์.
ควรทำอย่างไรเมื่อคอลัมน์ใกล้กันหรือห่างกันเกินไป?
เรียก ChartSeriesGroup.setGapWidth บนกลุ่มชุดแม่ที่เหมาะสม. เพิ่มค่าถ้าต้องการขยายช่องว่างระหว่างกลุ่ม, หรือ ลดค่าเพื่อทำให้กลุ่มใกล้กันมากขึ้น.