PHP ile Sunumlarda Grafik Veri Serilerini Yönetme
Genel Bakış
Bir grafik, çizilen verilerini bir grafik veri çalışma kitabında saklar. Bir ChartSeries bir dizi ilgili değeri temsil eder ve serideki her bir ChartDataPoint bir veya daha fazla çalışma kitabı hücresine başvurur. ChartCategory nesneleri, seriler tarafından paylaşılan etiketleri veya gruplama değerlerini sağlar. Serinin adı, kategoriler ve nokta değerleri bu nedenle yalnızca görüntü metni olarak saklanmak yerine ChartDataCell nesnelerine bağlanır.
Tipik bir kategori grafiği için, varsayılan çalışma kitabı satır 0’ı seri adları için, sütun 0’ı kategori adları için ve kalan hücreleri seri değerleri için kullanır. ChartDataWorkbook.getCell yöntemine geçirilen çalışma sayfası, satır ve sütun indisleri sıfır tabanlıdır. Bu düzen, varsayılan verilerle bir grafik oluşturduğunuzda kullanışlıdır, ancak mevcut her grafik bununla aynı yapıyı kullanır diye varsaymayın. Yüklenmiş bir sunumda, çalışma kitabı değerlerini değiştirmeden önce seriler, kategoriler ve veri noktaları tarafından referans edilen hücreleri inceleyin.
Grafik ayarlarının üç farklı kapsamı vardır:
- Bir serinin tüm noktaları için varsayılan görünümü sağlayan, ChartSeries.getFormat gibi seri‑seviyesi ayarlar.
- Bir nokta için serinin görünümünü geçersiz kılan, ChartDataPoint.getFormat gibi veri‑nokta ayarları.
- Aynı ChartSeriesGroup içinde bulunan uyumlu serilere uygulanan grup ayarları. Örtüşme veya boşluk genişliği gibi seçenekleri ayarlamanız gerektiğinde, grup üzerinden ChartSeries.getParentSeriesGroup metodunu kullanın.
Açıkça bir nokta veya seri doldurması ayarlanmamışsa, grafik stili ve teması otomatik görünümü belirler. Hem seri hem de nokta biçimlendirmesi mevcut olduğunda, nokta biçimlendirmesi o nokta için önceliklidir.

Grafik Serisi Çakışmasını Ayarla
ChartSeries.getOverlap bir 2B grafikte çubukların veya sütunların ne kadar örtüştüğünü %‑100’den –100’e kadar raporlar. Bu, üst serinin grup ayarının yalnızca okunabilir bir yansımasıdır. O gruptaki her uyumlu seriyi güncellemek için ChartSeriesGroup.setOverlap kullanın. Bu seçenek, gruplanmış çubuk veya sütun gösteren grafik türlerine uygulanır; kombinasyon grafiklerinde ilgili olmayan seri gruplarını etkilemez.
Aşağıdaki örnek, ilk seriyi içeren grup için çakışmayı ayarlar:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$overlapPercent = 30;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
// Yeni grafik örnek seriler, kategoriler ve değerler içerir.
$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();
}
}
Sonuç:

Seri Doldurma Rengini Değiştir
Tüm bir seri için varsayılan doldurmayı ayarlamak üzere ChartSeries.getFormat kullanın. Bir noktanın zaten açık bir doldurması varsa, onun ChartDataPoint.getFormat ayarı o nokta için serinin doldurmasını geçersiz kılar.
Aşağıdaki örnek, ilk seriye katı mavi bir doldurma uygular:
$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();
}
}
Sonuç:

Seri Adını Değiştir
Bir seri adı grafik veri çalışma kitabında saklanır ve genellikle lejende gösterilir. Küme sütun grafiği için oluşturulan varsayılan çalışma kitabında, B1 hücresi satır 0, sütun 1’de yer alır ve ilk serinin adını içerir. Aşağıdaki örnekteki adlandırılmış değişkenler bu yapıyı açıkça gösterir:
$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();
}
}
Ayrıca, zaten ChartSeries.getName tarafından referans edilen hücreyi güncelleyebilirsiniz. Bu yaklaşım, mevcut bir grafikte belirli bir satır ve sütun varsayımından kaçınır:
$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();
}
}
Sonuç:

Otomatik Seri Doldurma Rengini Al
ChartSeries.getAutomaticSeriesColor serinin indeksi ve grafik stilinden hesaplanan rengi döndürür. Bu, seri doldurması açıkça tanımlanmamışsa kullanılan renktir. Yöntemi çağırmak hesaplanan rengi okur; yeni bir doldurma atamaz.
Aşağıdaki örnek, her varsayılan serinin otomatik rengini yazdırır:
$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();
}
}
Varsayılan grafik stili için örnek çıktı:
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]
Kesin renkler grafik stiline ve temaya bağlıdır.
Bir Grafik Serisi için Ters Doldurma Rengini Ayarla
Çubuk, sütun ve baloncuk serileri için, negatif değerleri farklı bir doldurmada göstermek amacıyla ChartSeries.setInvertIfNegative kullanılabilir. Normal seri doldurmasını katı olarak ayarlayın, terslemeyi etkinleştirin ve negatif değer rengi için ChartSeries.getInvertedSolidFillColor metodunu kullanın. Negatif sayılar çalışma kitabında değişmez; yalnızca görüntüleme rengi değişir.
Aşağıdaki örnek, varsayılan grafik verisini bir seriye değiştirir. Çalışma sayfası satır 0 serinin adını, sütun 0 kategori adlarını ve sütun 1 değerleri içerir:
$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();
}
}
Sonuç:

Bir nokta için terslemeyi ChartDataPoint.setInvertIfNegative ile etkinleştirebilirsiniz. Aşağıdaki örnekte, seri için tersleme devre dışı bırakılmış ve yalnızca seçilen nokta için etkinleştirilmiştir. Etkinin görülmesi için nokta negatif bir değer de alır:
$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();
}
}
Belirli Bir Veri Noktası Değerini Temizle
Bir noktayı diğerlerini kaldırmadan boş bırakmak için, arka plan çalışma kitabı hücresini null olarak ayarlayın. Sütun grafiği için, çizilen değer ChartDataPoint.getValue ile elde edilir. Veri noktası aynı kategori konumunda kalır, ancak grafik boş‑değer ayarlarına göre değerini boş olarak işler.
Aşağıdaki örnek, ilk serideki yalnızca ikinci noktayı temizler:
$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();
}
}
Dağılım grafiklerinde ayrı X ve Y hücreleri, baloncuk grafiklerinde ise bir boyut hücresi kullanılır. Kaldırmak istediğiniz değeri temsil eden hücreyi yalnızca temizleyin. Diğer noktaları korumak istediğinizde ChartDataPointCollection.clear metodunu çağırmayın; bu yöntem koleksiyondaki tüm veri noktalarını siler.
Seri Boşluk Genişliğini Ayarla
Boşluk genişliği, yan yana çubuk veya sütun kümeleri arasındaki alanı, çubuk veya sütun genişliğinin yüzdesi olarak ifade eder. Çakışma gibi, bu da bir seri yerine üst serinin grup ayarına aittir. Grup için bir kez ChartSeriesGroup.setGapWidth çağırın. Daha büyük bir değer kümeler arasındaki boşluğu artırır; daha küçük bir değer onları daha sıklaştırır.
Aşağıdaki örnek boşluk genişliğini değiştirir ve yalnızca son sunumu kaydeder:
$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();
}
}
Sonuç:

SSS
Hangi grafik türleri veri serilerini destekler?
ChartType enum’unda temsil edilen tüm grafik türleri veri kullanır, ancak serilerinin değer yapısı ve ayarları aynı değildir. Örneğin, kategori grafikleri kategori ve değerler kullanır, dağılım grafikleri X ve Y değerleri, baloncuk grafikleri ise baloncuk boyutları ekler. Seri türüyle eşleşen veri‑nokta oluşturma yöntemini kullanın. Çakışma ve boşluk genişliği gibi seçenekler yalnızca uyumlu çubuk veya sütun gruplarına uygulanır.
Grafik serisi grubu nedir?
ChartSeriesGroup aynı grup‑seviyesi çizim ayarlarını paylaşan uyumlu serileri içerir. Bir kombinasyon grafiği birden fazla grup barındırabilir; bir seriden erişilen grup ayarını değiştirmek, grafikteki tüm serileri zorunlu olarak etkilemez.
Yeni oluşturulan bir grafik varsayılan veri içerir mi?
Evet. Varsayılan olarak, ShapeCollection.addChart örnek seriler, kategoriler ve değerler oluşturur. Bu hücreleri düzenleyebilir veya tamamen özel bir veri kümesi eklemeden önce serileri ve kategori koleksiyonlarını temizleyebilirsiniz. Aşırı yükleme, varsayılan veri olmadan da bir grafik oluşturabilir.
Grafik nesneleri çalışma kitabı hücrelerine nasıl bağlanır?
Seri adları, kategori etiketleri ve veri‑nokta değerleri bir ChartDataWorkbook içindeki hücrelere referans verir. Referans verilen bir hücre değiştirildiğinde ilgili grafik öğesi güncellenir. Özel veri oluştururken, her noktanın amaçlanan kategori altında çizildiğinden emin olmak için kategori satırları ve seri‑değer satırlarını hizalı tutun.
Bir serinin tümünü değil, yalnızca bir noktayı nasıl temizlerim?
İlgili değer hücresini null yaparak noktanın kategori konumunu boş bir nokta olarak tutun. ChartDataPointCollection.clear metodunu yalnızca o seriden tüm noktaları kaldırmak istediğinizde kullanın. Kategorileri de kaldırıyorsanız, her serinin değerlerinin kategori koleksiyonuyla hizalı kalmasını sağlayın.
Boş noktalar nasıl görüntülenir?
Sonuç, grafik türüne ve Chart.setDisplayBlanksAs ile yapılandırılan değere bağlıdır. Desteklenen grafikler boşlukları boşluk olarak, sıfır değeri olarak veya komşu noktaları bağlayarak gösterebilir. Sunumunuzdaki eksik verinin anlamına en uygun ayarı seçin.
Negatif değerler nasıl biçimlendirilir?
Desteklenen çubuk, sütun ve baloncuk serileri için ChartSeries.setInvertIfNegative metodunu çağırın ve ChartSeries.getInvertedSolidFillColor ile dönen rengi ayarlayın. Bireysel bir nokta için terslemeyi ChartDataPoint.setInvertIfNegative ile geçersiz kılabilirsiniz. Bu yöntemler biçimlendirmeyi etkiler, saklanan sayısal değerleri değiştirmez.
Hem seri hem de nokta biçimlendirilmişse hangi biçimlendirme kazanır?
Açık veri‑nokta biçimlendirmesi o nokta için önceliklidir. Diğer noktalar, serinin açık biçimlendirmesini ya da serinin biçimi tanımlı değilse otomatik grafik stili ve temasını kullanmaya devam eder. Çakışma ve boşluk genişliği gibi grup ayarları düzeni kontrol eder ve nokta‑seviyesi biçimlendirme geçersiz kılmaları değildir.
Bir grafikte kaç seri bulunabileceğiyle ilgili bir sınır var mı?
Aspose.Slides ayrı bir sabit seri sayısı sınırı getirmez. Pratikte, dosya boyutu kısıtlamaları, mevcut bellek, render süresi ve grafiğin okunabilirliği faydalı bir sınırı belirler.
Sütunlar çok yakınıyor veya çok uzaksa ne yapmalıyım?
Uygun üst seri grubunda ChartSeriesGroup.setGapWidth metodunu çağırın. Değeri artırarak kümeler arasındaki boşluğu genişletin, azaltarak kümeleri birbirine daha yakın hâle getirin.