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.

Automatické rozestupy popisků kategorií se všemi 24 sloupci viditelnými

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.

Manuální interval popisků kategorií tři se všemi 24 sloupci viditelnými

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ů.