Správa datových sérií grafu v prezentacích v PHP
Přehled
Graf ukládá svá vykreslená data do sešitu s daty grafu. ChartSeries představuje jednu sadu souvisejících hodnot a každý ChartDataPoint v sérii odkazuje na jednu nebo více buněk sešitu. Objekty ChartCategory poskytují štítky nebo hodnoty seskupení sdílené sérií. Název série, kategorie a hodnoty bodů jsou tedy propojeny s objekty ChartDataCell, místo aby byly uloženy pouze jako zobrazovaný text.
Pro typický kategoriový graf výchozí sešit používá řádek 0 pro názvy sérií, sloupec 0 pro názvy kategorií a zbývající buňky pro hodnoty sérií. Indexy listu, řádku a sloupce předávané metodě ChartDataWorkbook.getCell jsou nulové‑založené. Toto rozložení je užitečné, když vytváříte graf s výchozími daty, ale ne předpokládejte, že každý existující graf ho používá. Pro načtenou prezentaci si před změnou hodnot sešitu prohlédněte buňky, na které odkazují série, kategorie a datové body.
Nastavení grafu mají tři různé rozsahy:
- Nastavení na úrovni série, například ChartSeries.getFormat, poskytuje výchozí vzhled pro všechny body v jedné sérii.
- Nastavení datového bodu, například ChartDataPoint.getFormat, přepisuje vzhled série pro jeden bod.
- Skupinová nastavení se vztahují na kompatibilní série, které patří do stejné ChartSeriesGroup. Přístup ke skupině získáte pomocí ChartSeries.getParentSeriesGroup, když potřebujete nastavit například překrytí nebo šířku mezery.
Když není explicitně nastaveno vyplnění bodu nebo série, určuje automatický vzhled styl a motiv grafu. Když jsou zároveň přítomna nastavení série i bodu, má přednost formátování bodu.

Nastavení překrytí sérií grafu
ChartSeries.getOverlap uvádí, jak moc se překrývají pruhy nebo sloupce ve 2D grafu, v rozmezí od -100 % do 100 %. Jedná se o pouze‑ke‑čtení projekci nastavení na nadřazenou skupinu sérií. Použijte ChartSeriesGroup.setOverlap k aktualizaci všech kompatibilních sérií v této skupině. Tato možnost se vztahuje na typy grafů, které zobrazují seskupené pruhy nebo sloupce; neovlivní nesouvisející skupiny sérií v kombinovaném grafu.
Následující příklad nastaví překrytí pro skupinu, která obsahuje první sérii:
$firstSlideIndex = 0;
$firstSeriesIndex = 0;
$overlapPercent = 30;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item($firstSlideIndex);
// Nový graf obsahuje ukázkové série, kategorie a hodnoty.
$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();
}
}
Výsledek:

Změna barvy výplně série
Použijte ChartSeries.getFormat k nastavení výchozí výplně pro celou sérii. Pokud má bod již explicitně nastavenou výplň, jeho nastavení ChartDataPoint.getFormat přepíše výplň série pro tento bod.
Následující příklad použije jednotnou modrou výplň na první sérii:
$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();
}
}
Výsledek:

Změna názvu série
Název série je uložen v sešitu dat grafu a normálně se zobrazuje v legendě. Ve výchozím sešitu vytvořeném pro sloupcový seskupený graf je buňka B1 v řádku 0, sloupci 1 a obsahuje název první série. Pojmenované proměnné v následujícím příkladu tuto strukturu explicitně uvádějí:
$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();
}
}
Můžete také aktualizovat buňku již odkazovanou metodou ChartSeries.getName. Tento přístup zabraňuje předpokladu konkrétního řádku a sloupce v existujícím grafu:
$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();
}
}
Výsledek:

Vytvoření série s názvem z více buněk
Kompozitní název série je užitečný, když je název produktu a období zprávy uloženy v samostatných buňkách sešitu. Například můžete sloučit Product A v B1 a 2026 v C1 do jediného názvu série a zároveň mít obě části propojené se svými zdrojovými buňkami.
Použijte ChartDataWorkbook::getCellCollection k získání rozsahu názvu a následně tuto kolekci předávejte metodě ChartSeriesCollection::add. Argument skipHiddenCells určuje, zda jsou zahrnuty skryté buňky: true je vyloučí, false zahrne. Tento příklad používá false, aby zahrnul všechny buňky v rozsahu názvu.
Následující příklad vytvoří prezentaci s jednou sérií a dvěma datovými body. Buňky B1:C1 poskytují pouze název série; A2:A3 poskytují štítky kategorií a B2:B3 numerické hodnoty.
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);
// Tyto dvě buňky poskytují název série.
$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);
// Samostatné buňky poskytují kategorie a číselné datové body.
$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();
}
Výsledný název série je Product A 2026, s mezerou mezi hodnotami dvou buněk. Legenda jej zobrazuje jako jeden záznam pro oba sloupce. Obrázek níže ilustruje výsledek:

Získání automatické barvy výplně série
ChartSeries.getAutomaticSeriesColor vrací barvu vypočtenou z indexu série a stylu grafu. Jedná se o barvu použité, když výplň série nebyla explicitně definována. Volání metody pouze načte vypočtenou barvu; nepřiřazuje novou výplň.
Následující příklad vypíše automatickou barvu každé výchozí série:
$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();
}
}
Ukázkový výstup pro výchozí styl grafu:
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]
Přesné barvy závisí na stylu a motivu grafu.
Nastavení obrácené barvy výplně pro sérii grafu
Pro pruhové, sloupcové a bublinové série může ChartSeries.setInvertIfNegative zobrazovat záporné hodnoty jinou výplní. Nastavte běžnou výplň série na pevnou, povolte inverzi a přiřaďte barvu záporných hodnot pomocí ChartSeries.getInvertedSolidFillColor. Záporná čísla zůstávají v sešitu beze změny; mění se pouze jejich barva při zobrazení.
Následující příklad nahradí výchozí data grafu jednou sérií. Řádek 0 listu obsahuje název série, sloupec 0 obsahuje názvy kategorií a sloupec 1 hodnoty:
$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();
}
}
Výsledek:

Inverzi můžete povolit pro jeden bod pomocí ChartDataPoint.setInvertIfNegative. V následujícím příkladu je inverze zakázána pro sérii a povolena pouze pro vybraný bod. Bod má také přiřazenou zápornou hodnotu, aby byl efekt viditelný:
$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();
}
}
Vymazání konkrétní hodnoty datového bodu
Chcete‑li prázdný bod, aniž byste odstranili ostatní body, nastavte jeho odpovídající buňku sešitu na null. U sloupcového grafu je vykreslená hodnota dostupná přes ChartDataPoint.getValue. Datový bod zůstane na stejném místě kategorie, ale graf jej bude považovat za prázdný podle nastavení zobrazení prázdných hodnot grafu.
Následující příklad vymaže pouze druhý bod v první sérii:
$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();
}
}
U rozptýlených grafů jsou použity samostatné buňky X a Y a u bublinových grafů i buňka velikosti. Vymažte pouze buňku, která představuje hodnotu, kterou chcete odstranit. Nepoužívejte ChartDataPointCollection.clear, když chcete zachovat ostatní body, protože tato metoda odstraňuje všechny datové body ze sbírky.
Řízení zobrazování prázdných buněk
Skryté buňky, které obsahují hodnoty, jsou odlišné od prázdných buněk. Pro zahrnutí nebo vyloučení dat ze skrytých řádků a sloupců listu viz Include Data from Hidden Rows and Columns.
Prázdná buňka sešitu představuje chybějící data; buňka obsahující 0 představuje známou číselnou hodnotu. Zavolejte ChartDataCell::setValue s null, aby buňka byla prázdná. Číselná nula zůstane nulou bez ohledu na nastavení prázdných buněk.
Použijte Chart::setDisplayBlanksAs k výběru, jak graf zobrazuje prázdné buňky. Toto nastavení platí pro celý graf. Mění způsob, jakým jsou prázdné body vykreslovány, aniž by se prázdná buňka sešitu vyplňovala nulou nebo interpolovanou hodnotou.
Následující samostatný příklad vytvoří čárový graf s jednou sérií, vymaže hodnotu pro den 3 a uloží graf ve všech třech režimech. Vstupní soubor není potřeba. ChartDataWorkbook používá list 0, sloupec 0 pro štítky kategorií a sloupec 1 pro hodnoty; řádek 0 obsahuje název série. Konečná data jsou 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);
}
// Nechte den 3 skutečně prázdný, přičemž zachováte jeho kategorii a datový bod.
$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();
}
Každý výstupní soubor ukládá režim přiřazený před uložením: empty_cells_Gap.pptx, empty_cells_Zero.pptx a empty_cells_Span.pptx. Pro uložení jen jedné verze přiřaďte požadovaný režim a prezentaci uložte jednou místo iterace přes režimy.
Porovnání níže ukazuje stejná data ve všech třech souborech. Den 3 je ve všech případech v sešitu prázdný:

Viditelný efekt závisí na typu grafu. U čárového grafu lze všechny tři režimy snadno porovnat. U pruhových a sloupcových grafů není žádná linie, která by spojila chybějící kategorii, takže Span nemůže vytvořit ukázaný spojovací úsek; chybějící sloupec a sloupec o výšce nula mohou také vypadat podobně. Podobně u rozptýleného grafu s pouze značkami není žádná spojovací linie. Neočekávejte tři odlišné výsledky pro každý typ grafu; ověřte výstup pro typ, který používáte.
Nastavení šířky mezery mezi sériemi
Šířka mezery je prostor mezi sousedními shluky pruhů nebo sloupců, vyjádřený v procentech šířky pruhu nebo sloupce. Stejně jako překrytí patří rodičovské skupině sérií, nikoli jedné sérii. Zavolejte ChartSeriesGroup.setGapWidth jednou pro skupinu. Větší hodnota vytvoří více prostoru mezi shluky; menší hodnota je učiní hustšími.
Následující příklad změní šířku mezery a uloží pouze finální prezentaci:
$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();
}
}
Výsledek:

Často kladené otázky
Jaké typy grafů podporují datové série?
Všechny typy grafů reprezentované výčtem ChartType používají data grafu, ale jejich série nemají vždy stejnou strukturu hodnot nebo nastavení. Například kategoriové grafy používají kategorie a hodnoty, rozptýlené grafy používají hodnoty X a Y a bublinové grafy přidávají velikosti bublin. Použijte metodu tvorby datového bodu, která odpovídá typu série. Možnosti jako překrytí a šířka mezery se vztahují jen na kompatibilní skupiny pruhů nebo sloupců.
Co je skupina sérií grafu?
ChartSeriesGroup obsahuje kompatibilní série, které sdílejí nastavení úrovně skupiny při vykreslování. Kombinovaný graf může obsahovat více než jednu skupinu, takže změna skupiny dosažené přes jednu sérii nemusí nutně změnit všechny série v grafu.
Obsahuje nově vytvořený graf výchozí data?
Ano. Ve výchozím nastavení metoda ShapeCollection.addChart vytváří ukázkové série, kategorie a hodnoty. Tyto buňky můžete upravit nebo před přidáním vlastního datového souboru vymazat jak kolekce sérií, tak kolekce kategorií. Přetížení může také vytvořit graf bez výchozích dat.
Jak jsou grafické objekty propojeny s buňkami sešitu?
Názvy sérií, štítky kategorií a hodnoty datových bodů odkazují na buňky v ChartDataWorkbook. Změna odkazované buňky aktualizuje odpovídající prvek grafu. Při vytváření vlastních dat udržujte řádky kategorií a řádky hodnot sérií zarovnané, aby každý bod byl vykreslen pod zamýšlenou kategorií.
Jak vymazat jeden bod místo celé série?
Nastavte příslušnou buňku hodnoty na null, aby bod zachoval svou pozici v kategorii jako prázdný bod. Používejte ChartDataPointCollection.clear pouze tehdy, když chcete odstranit všechny body z dané série. Pokud také odstraňujete kategorie, aktualizujte všechny série tak, aby jejich hodnoty zůstaly zarovnané s kolekcí kategorií.
Jak jsou prázdné body zobrazovány?
Výsledek závisí na typu grafu a na hodnotě nastavené pomocí Chart.setDisplayBlanksAs. Podporované grafy mohou zobrazovat prázdná místa jako mezery, jako nuly nebo spojující sousední body. Vyberte nastavení, které odpovídá významu chybějících dat ve vaší prezentaci. Viz Řízení zobrazování prázdných buněk pro úplný příklad a vizuální srovnání.
Jak jsou formátovány záporné hodnoty?
U podporovaných pruhových, sloupcových a bublinových sérií zavolejte ChartSeries.setInvertIfNegative a nastavte barvu vrácenou metodou ChartSeries.getInvertedSolidFillColor. Chování můžete přepsat pro jednotlivý bod pomocí ChartDataPoint.setInvertIfNegative. Tyto metody ovlivňují formátování, nikoli uložené číselné hodnoty.
Které formátování má přednost, když je formátována jak série, tak bod?
Explicitní formátování datového bodu má přednost pro daný bod. Ostatní body nadále používají explicitní formát série nebo, pokud není definován, automatický styl a motiv grafu. Skupinová nastavení, jako jsou překrytí a šířka mezery, řídí rozložení a nejsou přepisovány na úrovni bodu.
Existuje limit počtu sérií, které může graf obsahovat?
Aspose.Slides neukládá samostatný pevný limit počtu sérií. V praxi určují omezení souboru prezentace, dostupná paměť, čas renderování a čitelnost grafu praktické limity.
Co změnit, když jsou sloupce příliš blízko nebo daleko od sebe?
Zavolejte ChartSeriesGroup.setGapWidth na příslušné rodičovské skupině sérií. Zvýšte hodnotu pro rozšíření prostoru mezi shluky nebo ji snížíte pro jejich přiblížení.