Přizpůsobení os grafu v prezentacích pomocí PHP
Přehled
Tento článek vysvětluje, jak přizpůsobit osy grafu pomocí Aspose.Slides pro PHP via Java. Pokrývá vypočtené hodnoty os, přepínání řádků a sloupců grafu, viditelnost os, intervaly popisků kategorií a značek, datumové kategorie a formátování, otáčení názvu, umístění osy a zobrazovací jednotky.
Získání maximálních hodnot na svislé ose v grafech
Vytvořte Presentation a přidejte plošný graf s výchozími daty. Zavolejte validateChartLayout před načtením vypočtených hodnot os, aby byl rozvrh grafu aktuální.
Načtěte getActualMaxValue a getActualMinValue pro limity osy a getActualMajorUnit a getActualMinorUnit pro intervaly značek. getActualMajorUnitScale a getActualMinorUnitScale poskytují časové jednotky, které jsou relevantní pro datumové osy. Příklad uloží tyto hodnoty do lokálních proměnných a uloží graf.
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::Area, 100, 100, 500, 350);
$chart->validateChartLayout();
$maxValue = $chart->getAxes()->getVerticalAxis()->getActualMaxValue();
$minValue = $chart->getAxes()->getVerticalAxis()->getActualMinValue();
$majorUnit = $chart->getAxes()->getVerticalAxis()->getActualMajorUnit();
$minorUnit = $chart->getAxes()->getVerticalAxis()->getActualMinorUnit();
$majorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMajorUnitScale();
$minorUnitScale = $chart->getAxes()->getVerticalAxis()->getActualMinorUnitScale();
$presentation->save("AxisValues_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Prohození dat mezi osami
Použijte switchRowColumn k výměně rolí řad a kategorií v datech grafu. Každá bývalá kategorie se stane řadou a každá bývalá řada se stane kategorií. Toto mění způsob seskupení dat; neprohazuje vodorovnou a svislou osu. Příklad používá setRange k vazbě výchozích dat na Sheet1!A1:D5, včetně řádku záhlaví a sloupce kategorií, před výměnou řádků a sloupců. Uloží graf se čtyřmi řadami a třemi kategoriemi.
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, 100, 100, 400, 300);
$chart->getChartData()->setRange("Sheet1!A1:D5");
$chart->getChartData()->switchRowColumn();
$presentation->save("SwitchChartRowColumns_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Zakázání svislé osy pro čárové grafy
Zavolejte setVisible s hodnotou false na svislé ose, aby se skryla. Příklad vytvoří čárový graf s výchozími daty a uloží jej se skrytou svislou osou.
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::Line, 100, 100, 400, 300);
$chart->getAxes()->getVerticalAxis()->setVisible(false);
$presentation->save("HiddenVerticalAxis.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Zakázání vodorovné osy pro čárové grafy
Zavolejte setVisible s hodnotou false na vodorovné ose, aby se skryla. Příklad vytvoří čárový graf s výchozími daty a uloží jej se skrytou vodorovnou osou.
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::Line, 100, 100, 400, 300);
$chart->getAxes()->getHorizontalAxis()->setVisible(false);
$presentation->save("HiddenHorizontalAxis.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Změna osy kategorií
Použijte setCategoryAxisType k výběru datumové nebo textové osy kategorií. Tento příklad vyžaduje ExistingChart.pptx, kde je graf první tvarem na první snímku a buňky kategorií obsahují číselné hodnoty datumu v Excelu. Změní vodorovnou osu na datumovou osu. Voláním setAutomaticMajorUnit s false, setMajorUnit s 1 a setMajorUnitScale s TimeUnitType::Months umístí hlavní značky po jednom měsíci.
use aspose\slides\CategoryAxisType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TimeUnitType;
$presentation = new Presentation("ExistingChart.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->get_Item(0);
$chart->getAxes()->getHorizontalAxis()->setCategoryAxisType(CategoryAxisType::Date);
$chart->getAxes()->getHorizontalAxis()->setAutomaticMajorUnit(false);
$chart->getAxes()->getHorizontalAxis()->setMajorUnit(1);
$chart->getAxes()->getHorizontalAxis()->setMajorUnitScale(TimeUnitType::Months);
$presentation->save("ChangeChartCategoryAxis_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Řízení intervalů popisků osy kategorií
Když má graf mnoho kategorií, snižte počet viditelných popisků osy, aniž byste odstraňovali kategorie nebo datové body. Zavolejte setAutomaticTickLabelSpacing s false a potom předáte požadovaný interval kategorií do setTickLabelSpacing. Pro textové kategorie v jejich normálním pořadí se počítá od první kategorie:
| Interval | Popisky zobrazené v příkladu |
|---|---|
1 |
Kategorie 1, Kategorie 2, Kategorie 3, … Kategorie 24 |
2 |
Kategorie 1, Kategorie 3, Kategorie 5, … Kategorie 23 |
3 |
Kategorie 1, Kategorie 4, Kategorie 7, … Kategorie 22 |
Interval 3 zobrazí každý třetí popisek a mezi zobrazenými ponechá dva skryté. Neodstraňuje odpovídající sloupce. Automatické rozestupy volí interval podle dostupného místa; nemusí zobrazit každý popisek.
Značky mají samostatná nastavení. Zavolejte setAutomaticTickMarksSpacing s false a použijte setTickMarksSpacing k nastavení jejich intervalu. Například 1 ponechá značku u každého intervalu kategorie, zatímco popisky se objeví jen každou třetí kategorii. Použijte setMajorTickMark s viditelným stylem, abyste viděli výsledek. Volání kterékoli automatické nastavení zpět na true umožní grafu znovu zvolit tento interval.
use aspose\slides\CategoryAxisType;
use aspose\slides\ChartType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TickMarkType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$chart = $slide->getShapes()->addChart(ChartType::ClusteredColumn, 30, 40, 660, 320);
$chart->setLegend(false);
$chart->getChartData()->getCategories()->clear();
$chart->getChartData()->getSeries()->clear();
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
$series = $chart->getChartData()->getSeries()->add(ChartType::ClusteredColumn);
for ($i = 0; $i < 24; $i++) {
$categoryCell = $workbook->getCell(0, $i + 1, 0, "Category " . ($i + 1));
$chart->getChartData()->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, 10 + $i % 6 * 5);
$series->getDataPoints()->addDataPointForBarSeries($valueCell);
}
$axis = $chart->getAxes()->getHorizontalAxis();
$axis->setCategoryAxisType(CategoryAxisType::Text);
$axis->getTextFormat()->getTextBlockFormat()->setRotationAngle(0);
$axis->getTextFormat()->getPortionFormat()->setFontHeight(12);
$axis->setMajorTickMark(TickMarkType::Outside);
$axis->setAutomaticTickLabelSpacing(true);
$axis->setAutomaticTickMarksSpacing(true);
// Snímek 2: zobrazit každý třetí popisek, ale zachovat značku pro každou kategorii.
$manualSlide = $presentation->getSlides()->addClone($slide);
$manualChart = $manualSlide->getShapes()->get_Item(0);
$manualAxis = $manualChart->getAxes()->getHorizontalAxis();
$manualAxis->setAutomaticTickLabelSpacing(false);
$manualAxis->setTickLabelSpacing(3);
$manualAxis->setAutomaticTickMarksSpacing(false);
$manualAxis->setTickMarksSpacing(1);
// Snímek 3: nechat graf znovu zvolit oba intervaly.
$restoredSlide = $presentation->getSlides()->addClone($manualSlide);
$restoredChart = $restoredSlide->getShapes()->get_Item(0);
$restoredChart->getAxes()->getHorizontalAxis()->setAutomaticTickLabelSpacing(true);
$restoredChart->getAxes()->getHorizontalAxis()->setAutomaticTickMarksSpacing(true);
$presentation->save("CategoryAxisIntervals.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Automatické rozestupy (snímek 1): V tomto vykreslení se zobrazí každý druhý popisek kategorie a zabaluje se do dvou řádků. Automatický výsledek se může lišit podle velikosti grafu, fontů a vykreslovače.

Manuální rozestupy (snímek 2): Každý třetí popisek se zobrazí na jednom řádku, zatímco značky zůstávají u každého intervalu kategorie. Všechny 24 sloupce, včetně těch bez popisků, zůstávají viditelné se stejnými hodnotami. Snímek 3 obnoví automatický vzhled zobrazený výše.

Vyberte správnou osu a interval
Použijte tento interval počtu kategorií pro textovou osu kategorií, například osu kategorií sloupcového, čárového, plošného nebo pruhového grafu. Ve sloupcovém grafu jde o vodorovnou osu. V horizontálním pruhovém grafu je osa kategorií svislá, takže použijte tato nastavení na osu vrácenou metodou getVerticalAxis. Rozestup značek platí také pro osu řad v grafech, které ji mají.
Používejte rozestup popisků kategorií jen pro nastavení číselné stupnice hodnotové osy. Na hodnotové ose setMajorUnit určuje rozdíl v hodnotách: například hlavní jednotka 10 vytvoří značky při 0, 10, 20 atd., pokud osa začíná od nuly. Interval popisků kategorií 3 počítá pozice kategorií bez ohledu na jejich datové hodnoty. Grafy rozptylu a bublin používají hodnotové osy, nikoli textovou osu kategorií. Pro datumovou osu používejte časové hlavní jednotky a stupnice, jak je popsáno v části Změna osy kategorií.
Nastavení formátu data pro hodnoty osy kategorií
Příklad nahradí výchozí data grafu čtyřmi ročními hodnotami. Data jsou uložena jako sériová čísla OLE Automation v první tabulce (index 0), počítaná jako počet dní od 30. prosince 1899. Použijte setCategoryAxisType s CategoryAxisType::Date, zavolejte setNumberFormatLinkedToSource s false a předávejte yyyy metodě setNumberFormat, aby se popisky kategorií zobrazovaly jako čtyřciferný rok nezávisle na formátování buňky.
use aspose\slides\CategoryAxisType;
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::Line, 50, 50, 450, 300);
$chart->getChartData()->getCategories()->clear();
$chart->getChartData()->getSeries()->clear();
$workbook = $chart->getChartData()->getChartDataWorkbook();
$workbook->clear(0);
$baseDate = gmmktime(0, 0, 0, 12, 30, 1899);
$series = $chart->getChartData()->getSeries()->add(ChartType::Line);
for ($i = 0; $i < 4; $i++) {
$date = gmmktime(0, 0, 0, 1, 1, 2015 + $i);
$serialDate = ($date - $baseDate) / 86400;
$categoryCell = $workbook->getCell(0, $i + 1, 0, $serialDate);
$chart->getChartData()->getCategories()->add($categoryCell);
$valueCell = $workbook->getCell(0, $i + 1, 1, $i + 1);
$series->getDataPoints()->addDataPointForLineSeries($valueCell);
}
$chart->getAxes()->getHorizontalAxis()->setCategoryAxisType(CategoryAxisType::Date);
$chart->getAxes()->getHorizontalAxis()->setNumberFormatLinkedToSource(false);
$chart->getAxes()->getHorizontalAxis()->setNumberFormat("yyyy");
$presentation->save("DateAxisFormat.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Nastavení úhlu otočení pro název osy grafu
Zavolejte setTitle s true na svislé ose, zadejte text názvu a použijte setRotationAngle k otočení názvu. Úhel se měří ve stupních; tento příklad uloží sloupcový graf s názvem osy hodnot otočeným o 90 stupňů.
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, 450, 300);
$chart->getAxes()->getVerticalAxis()->setTitle(true);
$chart->getAxes()->getVerticalAxis()->getTitle()->addTextFrameForOverriding("Value");
$chart->getAxes()->getVerticalAxis()->getTitle()->getTextFormat()->getTextBlockFormat()->setRotationAngle(90);
$presentation->save("RotatedAxisTitle.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Nastavení umístění osy na ose kategorií nebo hodnot
Použijte setAxisBetweenCategories k určení, zda osa hodnot protíná osu kategorií mezi kategoriemi nebo na značkách kategorií. Toto nastavení platí pro osy kategorií. Příklad nastaví tuto možnost na true na vodorovné ose kategorií sloupcového grafu a uloží výsledek.
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, 450, 300);
$chart->getAxes()->getHorizontalAxis()->setAxisBetweenCategories(true);
$presentation->save("AxisBetweenCategories.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Nastavení jednotky zobrazení na ose hodnot grafu
Použijte setDisplayUnit ke škálování popisků na ose hodnot, aniž by se změnila základní data. S DisplayUnitType nastaveným na Millions se hodnota 60 000 000 zobrazí jako 60. Příklad vytvoří sloupcový graf a použije jednotku zobrazení miliony na jeho svislé ose.
use aspose\slides\ChartType;
use aspose\slides\DisplayUnitType;
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, 450, 300);
$chart->getAxes()->getVerticalAxis()->setDisplayUnit(DisplayUnitType::Millions);
$presentation->save("Result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
FAQ
Jak nastavit hodnotu, při které se jedna osa protíná s druhou (průsečík os)?
Použijte setCrossType k výběru chování průsečíku. Pro určení číselné hodnoty průsečíku použijte setCrossAt. Tato nastavení vám umožní posunout průsečík osy na vhodnou úroveň.
Jak mohu umístit popisky značek vzhledem k ose?
Zavolejte setTickLabelPosition s použitím TickLabelPositionType: Low, High, NextTo nebo None. Pro řízení samotných značek použijte setMajorTickMark nebo setMinorTickMark; jsou oddělené od umístění popisků.