ปรับแต่งจุดข้อมูลในแผนภูมิ Treemap และ Sunburst ด้วย PHP

บทนำ

นอกจากประเภทของแผนภูมิ PowerPoint อื่น ๆ แล้ว ยังมีประเภท “แบบลำดับชั้น” สองประเภท คือแผนภูมิ Treemap และ Sunburst (ซึ่งยังเรียกอีกชื่อว่า Sunburst Graph, Sunburst Diagram, Radial Chart, Radial Graph หรือ Multi Level Pie Chart) แผนภูมิเหล่านี้แสดงข้อมูลแบบลำดับชั้นที่จัดเป็นต้นไม้ ตั้งแต่ใบไม้จนถึงยอดกิ่ง ใบไม้ถูกกำหนดโดยจุดข้อมูลของซีรีส์ และระดับการจัดกลุ่มที่ซ้อนกันต่อมาจะกำหนดโดยหมวดหมู่ที่สอดคล้องกัน Aspose.Slides for PHP via Java ให้ความสามารถในการจัดรูปแบบจุดข้อมูลของแผนภูมิ Sunburst และ Treemap .

ด้านล่างเป็นแผนภูมิ Sunburst ซึ่งข้อมูลในคอลัมน์ Series1 กำหนดโหนดใบไม้ ส่วนคอลัมน์อื่น ๆ กำหนดจุดข้อมูลแบบลำดับชั้น:

todo:image_alt_text

เริ่มต้นด้วยการเพิ่มแผนภูมิ Sunburst ใหม่ลงในงานนำเสนอ:

  $pres = new Presentation();
  try {
    $chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Sunburst, 100, 100, 450, 400);
    # ...
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

หากต้องการจัดรูปแบบจุดข้อมูลของแผนภูมิ เราควรใช้สิ่งต่อไปนี้:

ChartDataPointLevelsManager, ChartDataPointLevel classes และเมธอด ChartDataPoint::getDataPointLevels ให้การเข้าถึงการจัดรูปแบบจุดข้อมูลของแผนภูมิ Treemap และ Sunburst. ChartDataPointLevelsManager ใช้สำหรับเข้าถึงหมวดหมู่หลายระดับ – มันเป็นคอนเทนเนอร์ของวัตถุ ChartDataPointLevel objects. โดยพื้นฐานแล้วมันเป็น wrapper สำหรับ ChartCategoryLevelsManager พร้อมคุณสมบัติที่เพิ่มขึ้นเฉพาะสำหรับจุดข้อมูล. คลาส ChartDataPointLevel มีสองเมธอด: getFormat และ getDataLabel ซึ่งให้การเข้าถึงการตั้งค่าที่สอดคล้องกัน.

แสดงค่าจุดข้อมูล

แสดงค่าของจุดข้อมูล “Leaf 4”:

  $dataPoints = $chart->getChartData()->getSeries()->get_Item(0)->getDataPoints();
  $dataPoints->get_Item(3)->getDataPointLevels()->get_Item(0)->getLabel()->getDataLabelFormat()->setShowValue(true);

todo:image_alt_text

ตั้งป้ายและสีของจุดข้อมูล

ตั้งป้ายข้อมูลของ “Branch 1” ให้แสดงชื่อซีรีส์ (“Series1”) แทนชื่อหมวดหมู่ จากนั้นตั้งค่าสีข้อความเป็นสีเหลือง:

  $branch1Label = $dataPoints->get_Item(0)->getDataPointLevels()->get_Item(0)->getLabel();
  $branch1Label->getDataLabelFormat()->setShowCategoryName(false);
  $branch1Label->getDataLabelFormat()->setShowSeriesName(true);
  $branch1Label->getDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
  $branch1Label->getDataLabelFormat()->getTextFormat()->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->YELLOW);

todo:image_alt_text

ตั้งสีสาขาของจุดข้อมูล

เปลี่ยนสีของสาขา “Steam 4”:

  $pres = new Presentation();
  try {
    $chart = $pres->getSlides()->get_Item(0)->getShapes()->addChart(ChartType::Sunburst, 100, 100, 450, 400);
    $dataPoints = $chart->getChartData()->getSeries()->get_Item(0)->getDataPoints();
    $stem4branch = $dataPoints->get_Item(9)->getDataPointLevels()->get_Item(1);
    $stem4branch->getFormat()->getFill()->setFillType(FillType::Solid);
    $stem4branch->getFormat()->getFill()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
    $pres->save("pres.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

todo:image_alt_text

คำถามที่พบบ่อย

ฉันสามารถเปลี่ยนลำดับ (การจัดเรียง) ของส่วนใน Sunburst/Treemap ได้หรือไม่?

ไม่ PowerPoint จะจัดเรียงส่วนโดยอัตโนมัติ (โดยทั่วไปเรียงจากค่ามากไปน้อยตามเข็มนาฬิกา) Aspose.Slides ทำตามพฤติกรรมนี้เช่นกัน: คุณไม่สามารถเปลี่ยนลำดับโดยตรงได้; ต้องทำโดยการเตรียมข้อมูลล่วงหน้า

ธีมของงานนำเสนอมีผลต่อสีของส่วนและป้ายอย่างไร?

สีของแผนภูมิจะสืบทอดจาก ธีม/พาเลต ของงานนำเสนอ ถ้าคุณไม่ได้ตั้งค่าเติมสี/ฟอนต์ด้วยตนเอง เพื่อให้ผลลัพธ์สม่ำเสมอ ควรกำหนดการเติมสีทึบและการจัดรูปแบบข้อความที่ระดับที่ต้องการ

การส่งออกเป็น PDF/PNG จะคงสีสาขาที่กำหนดเองและการตั้งค่าป้ายไว้หรือไม่?

ใช่ เมื่อส่งออกงานนำเสนอ การตั้งค่าของแผนภูมิ (การเติมสี, ป้าย) จะถูกคงไว้ในรูปแบบผลลัพธ์ เนื่องจาก Aspose.Slides จะเรนเดอร์โดยใช้การจัดรูปแบบของแผนภูมิ

ฉันสามารถคำนวณพิกัดจริงของป้าย/องค์ประกอบเพื่อวางโอเวอร์เลย์แบบกำหนดเองบนแผนภูมิได้หรือไม่?

ได้ หลังจากการจัดวางแผนภูมิได้รับการตรวจสอบแล้ว พิกัด x และ y จริงจะพร้อมใช้งานสำหรับองค์ประกอบ (เช่น DataLabel) ซึ่งช่วยในการวางตำแหน่งโอเวอร์เลย์อย่างแม่นยำ