Prezentációk diagramtengelyeinek testreszabása PHP használatával

Áttekintés

Ez a cikk bemutatja, hogyan lehet testreszabni a diagram tengelyeit az Aspose.Slides for PHP via Java használatával. Bemutatja a kiszámított tengelyértékeket, a diagram sorok és oszlopok cseréjét, a tengely láthatóságát, a kategória címke- és jelölő-intervalumokat, a dátumkategóriákat és formázást, a cím forgatását, a tengely elhelyezését és a megjelenítési egységeket.

A legnagyobb értékek lekérése a függőleges tengelyen a diagramokon

Hozzon létre egy Prezentáció és adjon hozzá egy területdiagramot alapértelmezett adatokkal. Hívja meg a validateChartLayout false értékkel a kiszámított tengelyértékek olvasása előtt, hogy a diagramelrendezés naprakész legyen.

Olvassa ki a getActualMaxValue a getActualMinValue a tengelyhatárokhoz, valamint a getActualMajorUnit a getActualMinorUnit a jelölőintervallumokhoz. A getActualMajorUnitScale és a getActualMinorUnitScale időegység-skálákat ad, amelyek a dátumtengelyekhez relevánsak. A példában ezek az értékek helyi változókba kerülnek, majd a diagram mentésre kerül.

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();
}

Az adatok cseréje a tengelyek között

Használja a switchRowColumn a diagramadatokban a sorozatok és kategóriák szerepének felcseréléséhez. Minden korábbi kategória sorozattá, és minden korábbi sorozat kategóriává alakul. Ez megváltoztatja, hogyan csoportosulnak az adatok; nem cseréli fel a vízszintes és függőleges tengelyeket. A példában a setRange a alapértelmezett adatokat a Sheet1!A1:D5 tartományra köt minden fejléccel és kategóriaoszloppal, mielőtt a sorok és oszlopok cseréjét elvégezné. Egy olyan diagramot ment, amely négy sorozatot és három kategóriát tartalmaz.

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();
}

A függőleges tengely letiltása vonaldiagramoknál

Hívja meg a setVisible false értékkel a függőleges tengelyen, hogy elrejtse. A példában egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és elmenti a függőleges tengely rejtve.

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();
}

A vízszintes tengely letiltása vonaldiagramoknál

Hívja meg a setVisible false értékkel a vízszintes tengelyen, hogy elrejtse. A példában egy alapértelmezett adatokkal rendelkező vonaldiagramot hoz létre, és elmenti a vízszintes tengely rejtve.

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();
}

Kategóriatengely módosítása

Használja a setCategoryAxisType a dátum vagy szöveg kategóriatengely kiválasztásához. Ez a példa az ExistingChart.pptx fájlt igényli, amelynek első diáján az első alakzat egy diagram, és a kategória cellák numerikus Excel dátumértékeket tartalmaznak. A vízszintes tengelyt dátumtengelyre változtatja. A setAutomaticMajorUnit false, a setMajorUnit 1, és a setMajorUnitScale TimeUnitType::Months hívása egy hónapos intervallumokkal helyezi el a fő jelölőket.

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();
}

Kategóriatengely címkeintervallumok vezérlése

Ha egy diagram sok kategóriát tartalmaz, csökkentse a látható tengelycímkék számát a kategóriák vagy adatpontok eltávolítása nélkül. Hívja meg a setAutomaticTickLabelSpacing false értékkel, majd adja meg a kívánt kategóriaintervallumot a setTickLabelSpacing segítségével. Szöveges kategóriák esetén a normál sorrendben a számlálás az első kategóriától kezdődik:

Intervallum Példában megjelenített címkék
1 Category 1, Category 2, Category 3, … Category 24
2 Category 1, Category 3, Category 5, … Category 23
3 Category 1, Category 4, Category 7, … Category 22

Egy 3 intervallum minden harmadik címkét jelenít meg, két címke rejtve marad a megjelenített címkék között. Nem távolítja el a megfelelő oszlopokat. Az automatikus távolság az elérhető hely alapján választ intervallumot; nem feltétlenül jeleníti meg az összes címkét.

A jelölőpontoknak külön vezérlésük van. Hívja meg a setAutomaticTickMarksSpacing false értékkel, és használja a setTickMarksSpacing a intervallum beállításához. Például a 1 minden kategóriaintervallumban megtart egy jelölőpontot, míg a címkék csak minden harmadik kategórián jelennek meg. Használja a setMajorTickMark látható stílussal, hogy lássa az eredményt. Bármelyik automatikus távolság beállítót true-ra állítva a diagram újra kiválasztja azt az intervallumot.

A következő önálló példa 24 kategóriát és egy sorozatot hoz létre, majd három diát ment a CategoryAxisIntervals.pptx fájlba: automatikus távolság, kézi címke-távolság független jelölőpontokkal, és visszaállított automatikus távolság. A két másolat megtartja az eredeti diagramadatokat. Bem­eneti prezentációra nincs szükség. A vízszintes címkeszöveg megkönnyíti a sűrűség különbségének észlelését.

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);

    // Dia 2: minden harmadik címkét jelenítse meg, de minden kategóriához tartson meg egy jelölőpontot.
    $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);

    // Dia 3: engedje, hogy a diagram újra kiválassza mindkét intervallumot.
    $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();
}

Automatikus távolság (1. dia): Ebben a megjelenítésben minden második kategóriacímke jelenik meg, és két sorba törik. Az automatikus eredmény a diagram méretétől, betűtípusoktól és a renderertől függően változhat.

Automatikus kategória címke távolság, minden 24 oszlop látható

Kézi távolság (2. dia): Minden harmadik címke jelenik meg egy sorban, míg a jelölőpontok minden kategóriaintervallumban megtartják helyüket. Az összes 24 oszlop, beleértve a címké nélküli oszlopokat is, ugyanazokkal az értékekkel látható marad. A 3. dia visszaállítja a fenti automatikus megjelenést.

Kézi kategória címke háromas intervallummal, minden 24 oszlop látható

A megfelelő tengely és intervallum kiválasztása

Ezt a kategóriaszám-intervallumot szöveges kategóriatengely esetén használja, például oszlop-, vonal-, terület- vagy sávdiagram kategóriatengelyén. Oszlopdiagram esetén ez a vízszintes tengely. Vízszintes sávdiagram esetén a kategóriatengely függőleges, ezért ezeket a beállításokat a getVerticalAxis által visszaadott tengelyre alkalmazza. A jelölőpont távolság a sorozattengelyre is érvényes, ha a diagram tartalmaz ilyenet.

Ne használja a kategória címke távolságot az értéktengely numerikus skálájának beállítására. Az értéktengelyen a setMajorUnit az értékek közti különbséget határozza meg: például a 10 főegység 0, 10, 20 stb. jelölőket eredményez, ha a tengely nullánál kezdődik. A 3 kategória címke intervallum ehelyett a kategóriahelyek számát veszi alapul, függetlenül az adatértékektől. Szórt és buborék diagramok értéktengelyt használnak, nem szöveges kategóriatengelyt. Dátumtengely esetén használjon időalapú főegységeket és skálákat, ahogy a Kategóriatengely módosítása szakaszban leírtuk.

A dátumformátum beállítása a kategóriatengely értékeire

A példa a alapértelmezett diagramadatokat négy éves értékkel helyettesíti. A dátumok OLE Automation sorozatszámként vannak tárolva az első munkalapon (index 0), amely a 1899. december 30. óta eltelt napok számát jelenti. Használja a setCategoryAxisType CategoryAxisType::Date értékkel, hívja a setNumberFormatLinkedToSource false-lel, és adja át a yyyy-t a setNumberFormat‑nek, hogy a kategória címkék a négy számjegyű évszámot mutassák, függetlenül a cella formázásától.

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();
}

Forgási szög beállítása a diagram tengelycíméhez

Hívja meg a setTitle true értékkel a függőleges tengelyen, adja meg a címszöveget, és használja a setRotationAngle függvényt a cím forgatásához. A szög fokban van megadva; ez a példa egy oszlopdiagramot ment, amelynek értéktengely-címe 90 fokkal van elfordítva.

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();
}

A tengely pozíciójának beállítása kategória vagy értéktengelyen

Használja a setAxisBetweenCategories függvényt annak szabályozására, hogy az értéktengely a kategóriatengelyt kategóriák között vagy a kategória jelölőpontoknál metszze. Ez a beállítás a kategóriatengelyekre vonatkozik. A példa a vízszintes kategóriatengelyen true értékre állítja egy oszlopdiagramon, majd elmenti az eredményt.

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();
}

Megjelenítési egység beállítása diagram értéktengelyen

Használja a setDisplayUnit függvényt az értéktengely címkéinek skálázásához anélkül, hogy az adatokat módosítaná. A DisplayUnitType Millions értékre állításakor a 60 000 000 érték 60‑ként jelenik meg. A példa egy oszlopdiagramot hoz létre, és a milliós megjelenítési egységet a függőleges tengelyen alkalmazza.

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();
}

GYIK

Hogyan állíthatom be, hogy egy tengely hol metszi a másikat (tengelykereszteződés)?

A setCrossType használatával választhatja ki a kereszteződés viselkedését. Numerikus keresztezési érték megadásához a setCrossAt függvényt használja. Ezek a beállítások lehetővé teszik, hogy a tengelykereszteződést egy megfelelő alapvonalra mozgassa.

Hogyan helyezhetem el a jelölőcímkéket a tengelyhez képest?

Hívja meg a setTickLabelPosition a TickLabelPositionType használatával: Low, High, NextTo vagy None. A jelölőpontok saját szabályozásához használja a setMajorTickMark vagy a setMinorTickMark függvényeket; ezek különállóak a címke pozícionálásától.